C# 给站点指定位置的某种格式的图片添加水印

 更新时间:2009年05月20日 00:30:06   作者:  
可以给站点指定位置的某种格式的图片添加水印的c#实现代码。
复制代码 代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
namespace Chen
{
/// <summary>
/// HandlerImageOpener 的摘要说明
/// </summary>
public class HandlerImageOpener : IHttpHandler
{
public HandlerImageOpener()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private string _path = "";
/// <summary>
/// 水印图片路径
/// </summary>
public string PngPath
{
get
{
if (_path == "")
{
_path = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkedImagePath"]);
}
return _path;
}
}
/// <summary>
/// 为图片加水印并写入到Response.OutputStream
/// </summary>
/// <param name="hc">上下文对象</param>
public void GetNewBitMap(HttpContext hc)
{
// 加载原图片
//System.Web.HttpContext.Current.Response.Write(System.Drawing.Image.FromFile(hc.Request.PhysicalPath));
//System.Web.HttpContext.Current.Response.End();
Bitmap oldBmp = new Bitmap(System.Drawing.Image.FromFile(hc.Request.PhysicalPath));
int newWidth = oldBmp.Width;
int newHeight = oldBmp.Height;
if (oldBmp != null)
{
// 绑定画板
Graphics grap = Graphics.FromImage(oldBmp);
// 加载水印图片
Bitmap bt = new Bitmap(PngPath);
// 水印位置控制
int pH = GetNewPoint(newHeight, bt.Height, true);
int pW = GetNewPoint(newWidth, bt.Width, false);
if (newHeight < pH * 8)
pH = pH / 2;
if (newWidth < pW)
pW = pW / 2 / 2;
int pX = newHeight - pH;
int pY = newWidth - pW - 3;
// 添加水印
grap.DrawImage(bt, pY, pX, pW, pH);
// 写入到输出流
oldBmp.Save(hc.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
// 控制宽高
private int GetNewPoint(int oldP, int newP, bool isW)
{
int p = 4;
if (isW)
{
p = 16;
}
if (oldP < (newP * p))
{
newP /= 2;
if (oldP < (newP * p))
{
GetNewPoint(oldP, newP, isW);
}
}
return newP;
}
#region IHttpHandler 成员
bool IHttpHandler.IsReusable
{
get { return true; }
}
void IHttpHandler.ProcessRequest(HttpContext context)
{
GetNewBitMap(context);
}
#endregion
}
}
生成.dll文件后在web.config 中配置
<!--水印图片路径-->
<appSettings>
<add key="WatermarkedImagePath" value="~/logo.gif"/>
</appSettings>
<!--引用处理函数 path为需要加水印图片的目录-->
<httpHandlers>
<add type="Chen.HandlerImageOpener, Chen" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" />
</httpHandlers>

相关文章

  • asp.net 将设有过期策略的项添加到缓存中

    asp.net 将设有过期策略的项添加到缓存中

    调用 Insert 方法,将绝对过期时间或弹性过期时间传递给该方法。
    2009-04-04
  • ASP.NET中 Swagger添加JWT验证的流程

    ASP.NET中 Swagger添加JWT验证的流程

    主服务系统收到请求后会从headers中获取“令牌”,并从“令牌”中解析出该用户的身份权限,然后做出相应的处理,这一系列操作都是JWT解析,下面小编给大家详细介绍ASP.NET中 Swagger添加JWT验证的方法,感兴趣的朋友一起看看吧
    2024-04-04
  • asp.net core新特性之TagHelper标签助手

    asp.net core新特性之TagHelper标签助手

    这篇文章主要为大家详细介绍了asp.net core新特性之TagHelper标签助手的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • asp.net web页面元素的多语言化(多国语化)实现分享

    asp.net web页面元素的多语言化(多国语化)实现分享

    开发的一些系统,经常要求支持多语言(例如日文,英文等),接下来介绍如何实现asp.net开发中web页面实现页面元素的多语言化(多国语化)感兴趣的朋友可以了解下,或许对你学习有所帮助
    2013-02-02
  • Sqlite 常用函数封装提高Codeeer的效率

    Sqlite 常用函数封装提高Codeeer的效率

    以下是频繁用到的Sqlite函数,内容格式相对固定,封装一下有助于提高开发效率^_^至少提高Codeeer的效率了
    2012-12-12
  • WPF开发之利用DrawingVisual绘制高性能曲线图

    WPF开发之利用DrawingVisual绘制高性能曲线图

    通过WPF实现大数据曲线图时,如果用最基础的Canvas来实现,性能堪忧。所以本文将利用DrawingVisual绘制高性能曲线图,感兴趣的可以了解一下
    2022-02-02
  • WPF图片按钮的实现方法

    WPF图片按钮的实现方法

    这篇文章主要为大家详细介绍了WPF图片按钮的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 封装的一个asp.net验证码类

    封装的一个asp.net验证码类

    昨天在一个Q群上面群主发了一个用ASP.NET实现验证码的demo,下载下来然后运行正常,页面上的img标签成功调用了一个一般处理程序并显示了中文的验证码图片,虽然有点模糊,但是可见上面是四个中文,图片背景为白色,背后有噪点线,边框黑色。
    2010-12-12
  • Entity Framework实体拆分多个表

    Entity Framework实体拆分多个表

    这篇文章介绍了Entity Framework实体拆分多个表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 在子页中隐藏模板页中的div示例代码

    在子页中隐藏模板页中的div示例代码

    模板页右边包含了一个登陆div,想让没登陆的时候这个div显示,登陆后该div隐藏,具体的实现如下,需要的朋友可以参考下
    2013-08-08

最新评论