C# 给站点指定位置的某种格式的图片添加水印_asp.net教程-查字典教程网
C# 给站点指定位置的某种格式的图片添加水印
C# 给站点指定位置的某种格式的图片添加水印
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingS...

复制代码 代码如下:

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>

<>

<httpHandlers>

<add type="Chen.HandlerImageOpener, Chen" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" />

</httpHandlers>

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新asp.net教程学习
    热门asp.net教程学习
    编程开发子分类