加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

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

发布时间:2023-04-12 14:39:26 所属栏目:语言 来源:
导读:代码如下:

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;
 
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>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!