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>

时间: 2024-09-12 02:21:41

C# 给站点指定位置的某种格式的图片添加水印_实用技巧的相关文章

基于ASP.NET+easyUI框架实现图片上传功能(判断格式+即时浏览 )_实用技巧

基于ASP.Net +easyUI框架上传图片,判断格式+实现即时浏览,具体内容如下 <div> 选择图片:<input id="idFile" style="width:224px" runat="server" name="pic" onchange="javascript:setImagePreview(this,localImag,preview);" type="fil

把时间戳转换为日期格式的js代码_实用技巧

复制代码 代码如下: <script>     function getLocalTime(nS) {        return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');     }     alert(getLocalTime(1293072805));     </script> 结果是2010年12月23日 10:53第二种 复制代码 代码如下: <script&g

asp.net显示图片到指定的Image控件中 具体实现_实用技巧

由于asp.net中的Image控件是在System.Web.UI.WebControls命名空间中,所以不能像在winform中那样通过byte[]直接显示图片.     既然这样,就只能曲线救国了.这里的例子是这样的思路:teacherdetial.aspx是最终用来显示文字和图片的页面,但是由于我们的图片需要曲线救国,所以这里另外建立一个pic.aspx.在pic.aspx页面中我们显示图片,而将teacherdetial.aspx中的Image控件的url设为pic.aspx.最终我们完

Asp.net导出Excel/Csv文本格式数据的方法_实用技巧

刚刚开始做Excel相关的项目,所以遇到的问题不管大小都给记录一下 偶然的机会在添加数据的时候全改成了数字,结果输出的时候全自动变成了科学计数法,这是excel的强大功能,能自动识别数字和字符串,太聪明了反而有些麻烦,就像如果输入身份证(18位数字)的话那就不行了.超过了11位呢,下面查了些资料总结一下解决方案: 方法1: 在往excel中添加数据的时候在数据的前面加 单引号,我的是这个方法解决的 如:Sheet.Cells[iRow, iCol] ="'"+ ds.Tables[0]

asp.net转出json格式客户端显示时间_实用技巧

在服务器端利用 JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(obj); 对对像序列化, 对于时间类型得出结果为:\/Date(1216796600500)\/ 客户端解析的方式为: 复制代码 代码如下: function renderTime(data){ var da = eval('new ' + data.replace('/','','g').repla

把aspx页面伪装成静态html格式的实现代码_实用技巧

在 Global.asax 中添加 Application_BeginRequest 事件: 复制代码 代码如下: protected void Application_BeginRequest(object sender, EventArgs e) { string pathAndQuery = Request.Url.PathAndQuery.ToLower(); if (pathAndQuery.IndexOf(".html") > -1) { pathAndQuery =

php根据指定位置和长度获得子字符串的方法_php技巧

本文实例讲述了php根据指定位置和长度获得子字符串的方法.分享给大家供大家参考.具体分析如下: php的substr函数功能非常强大,不断可以从前往后去子字符串还可以从后往前取字符串 <?php $string = "beginning"; print("Position counted from left: ".substr($string,0,5)."\n"); print("Position counted form rig

VS2010新建站点发布并访问步骤详解_实用技巧

今天小编就带大家学习如何实现VS2010从新建站点到访问亲们的网站,我们的学习流程: 新建网站--IIS配置--发布网站-访问网站 大家是不是等着急了,下面就进入今天的主题! 我们在开发asp.net时,首先学会的就是在平台上新建一个站点,所谓"唱大戏搭架子",也是这么个道理,我们站点发布第一步就是新建网站. 我们首先打开VS2010,如下: 我们按照上图所示,点击"网站",选择开发语言"C#",来新建一个空网站.如下: 我们再来选择站点的位置,

asp.net(C#)压缩图片,可以指定图片模板高宽_实用技巧

复制代码 代码如下: //生成缩略图函数 //顺序参数:源图文件流.缩略图存放地址.模版宽.模版高 //注:缩略图大小控制在模版区域内 public static void MakeSmallImg(System.IO.Stream fromFileStream, string fileSaveUrl, System.Double templateWidth, System.Double templateHeight) { //从文件取得图片对象,并使用流中嵌入的颜色管理信息 System.Dr