当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > C# 给站点指定位置的某种格式的图片添加水印

ASP.NET
asp.net Execl的添加,更新操作实现代码
asp.net 生成曲线图实现代码
从外部的js文件中获取ASPX页面的控件ClientID
asp.net 因为数据库正在使用的解决方法
asp.net Repeater 自递增
asp.net 实现防迅雷等下载工具盗链
ASP.NET封装的SQL数据库访问类
asp.net 通过指定IP地址得到当前的网络上的主机的域名
aspx 服务器架设问题解决
ASP.NET Session使用详解
Asp.net 5种页面转向方法
ASP.NET 用户多次登录的解决方法
ASP.NET下母版页和内容页中的事件发生顺序整理
asp.net 程序性能优化的七个方面 (c#(或vb.net)程序改进)
从客户端检测到有潜在危险的Request.Form值的asp.net代码
asp.net CommunityServer中的wwwStatus
在应用程序级别之外使用注册为allowDefinition=''MachineToApplication''的节是错误的
.net开发人员常犯的错误分析小结
ASP.net Substitution 页面缓存而部分不缓存的实现方法
asp.net 生成静态时的过滤viewstate的实现方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 207 ::
收藏到网摘: n/a

可以给站点指定位置的某种格式的图片添加水印的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="/upload/tech/20091011/20091011144344_b3967a0e938dc2a6340e258630febd5a.gif"/>
</appSettings>
<!--引用处理函数 path为需要加水印图片的目录-->
<httpHandlers>
<add type="Chen.HandlerImageOpener, Chen" verb="*" path="/upload/tech/20091011/20091011144344_f29c21d4897f78948b91f03172341b7b.bmp" />
</httpHandlers>