前言
本文主要给大家介绍的是asp .net实现给图片添加图片水印的方法,注意是图片水印,需要的朋友们可以参考学习,下面话不多说来看看详细的介绍吧。
方法如下
首先写好一个写入图片水印的类,先创建一个imagewriter类库 (该类中有包含枚举类型和方法)
using system; using system.collections.generic; using system.linq; using system.text; using system.io; using system.collections; using system.drawing; using system.drawing.drawing2d; using system.drawing.imaging; namespace imagewriter { /// <summary> /// 图片处理类 /// </summary> public class imagemanager { #region 变量声明开始 /// <summary> /// 枚举: 水印位置 /// </summary> public enum watermarkposition { /// <summary> /// 左上 /// </summary> lefttop, /// <summary> /// 左中 /// </summary> left, /// <summary> /// 左下 /// </summary> leftbottom, /// <summary> /// 正上 /// </summary> top, /// <summary> /// 正中 /// </summary> center, /// <summary> /// 正下 /// </summary> bottom, /// <summary> /// 右上 /// </summary> righttop, /// <summary> /// 右中 /// </summary> rightcenter, /// <summary> /// 右下 /// </summary> rigthbottom } #endregion 变量声明结束 #region 构造函数开始 /// <summary> /// 构造函数: 默认 /// </summary> public imagemanager() { } #endregion 构造函数结束 #region 私有函数开始 /// <summary> /// 获取: 图片去扩展名(包含完整路径及其文件名)小写字符串 /// </summary> /// <param name="path">图片路径(包含完整路径,文件名及其扩展名): string</param> /// <returns>返回: 图片去扩展名(包含完整路径及其文件名)小写字符串: string</returns> private string getfilename(string path) { return path.remove(path.lastindexof('.')).tolower(); } /// <summary> /// 获取: 图片以'.'开头的小写字符串扩展名 /// </summary> /// <param name="path">图片路径(包含完整路径,文件名及其扩展名): string</param> /// <returns>返回: 图片以'.'开头的小写字符串扩展名: string</returns> private string getextension(string path) { return path.remove(0, path.lastindexof('.')).tolower(); } /// <summary> /// 获取: 图片以 '.' 开头的小写字符串扩展名对应的 system.drawing.imaging.imageformat 对象 /// </summary> /// <param name="format">以 '. '开头的小写字符串扩展名: string</param> /// <returns>返回: 图片以 '.' 开头的小写字符串扩展名对应的 system.drawing.imaging.imageformat 对象: system.drawing.imaging.imageformat</returns> private imageformat getimageformat(string format) { switch (format) { case ".bmp": return imageformat.bmp; case ".emf": return imageformat.emf; case ".exif": return imageformat.exif; case ".gif": return imageformat.gif; case ".ico": return imageformat.icon; case ".png": return imageformat.png; case ".tif": return imageformat.tiff; case ".tiff": return imageformat.tiff; case ".wmf": return imageformat.wmf; default: return imageformat.jpeg; } } /// <summary> /// 获取: 枚举 uinatlex.toolbox.imagemanager.watermarkposition 对应的 system.drawing.rectangle 对象 /// </summary> /// <param name="positon">枚举 uinatlex.toolbox.imagemanager.watermarkposition: uinatlex.toolbox.imagemanager.watermarkposition</param> /// <param name="x">原图宽度: int</param> /// <param name="y">原图高度: int</param> /// <param name="x">水印宽度: int</param> /// <param name="y">水印高度: int</param> /// <param name="i">边距: int</param> /// <returns>返回: 枚举 uinatlex.toolbox.imagemanager.watermarkposition 对应的 system.drawing.rectangle 对象: system.drawing.rectangle</returns> private rectangle getwatermarkrectangle(watermarkposition positon, int x, int y, int x, int y, int i) { switch (positon) { case watermarkposition.lefttop: return new rectangle(i, i, x, y); case watermarkposition.left: return new rectangle(i, (y - y) / 2, x, y); case watermarkposition.leftbottom: return new rectangle(i, y - y - i, x, y); case watermarkposition.top: return new rectangle((x - x) / 2, i, x, y); case watermarkposition.center: return new rectangle((x - x) / 2, (y - y) / 2, x, y); case watermarkposition.bottom: return new rectangle((x - x) / 2, y - y - i, x, y); case watermarkposition.righttop: return new rectangle(x - x - i, i, x, y); case watermarkposition.rightcenter: return new rectangle(x - x - i, (y - y) / 2, x, y); default: return new rectangle(x - x - i, y - y - i, x, y); } } #endregion 私有函数结束 #region 文字生成开始 #endregion 文字生成结束 #region 设置透明度开始 /// <summary> /// 设置: 图片 system.drawing.bitmap 对象透明度 /// </summary> /// <param name="sbitmap">图片 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="transparence">水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float</param> /// <returns>图片 system.drawing.bitmap: system.drawing.bitmap</returns> public bitmap settransparence(bitmap bm, float transparence) { if (transparence == 0.0f || transparence == 1.0f) throw new argumentexception("透明度值只能在0.0f~1.0f之间"); float[][] floatarray = { new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, transparence, 0.0f }, new float[] { 0.0f, 0.0f, 0.0f, 0.0f, 1.0f } }; imageattributes imageattributes = new imageattributes(); imageattributes.setcolormatrix(new colormatrix(floatarray), colormatrixflag.default, coloradjusttype.bitmap); bitmap bitmap = new bitmap(bm.width, bm.height); graphics graphics = graphics.fromimage(bitmap); graphics.drawimage(bm, new rectangle(0, 0, bm.width, bm.height), 0, 0, bm.width, bm.height, graphicsunit.pixel, imageattributes); graphics.dispose(); imageattributes.dispose(); bm.dispose(); return bitmap; } /// <summary> /// 设置: 图片 system.drawing.bitmap 对象透明度 /// </summary> /// <param name="readpath">图片路径(包含完整路径,文件名及其扩展名): string</param> /// <param name="transparence">水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float</param> /// <returns>图片 system.drawing.bitmap: system.drawing.bitmap</returns> public bitmap settransparence(string readpath, float transparence) { return settransparence(new bitmap(readpath), transparence); } #endregion 设置透明度结束 #region 添加水印开始 /// <summary> /// 生成: 原图绘制水印的 system.drawing.bitmap 对象 /// </summary> /// <param name="sbitmap">原图 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="wbitmap">水印 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="position">枚举 uinatlex.toolbox.imagemanager.watermarkposition : uinatlex.toolbox.imagemanager.watermarkposition</param> /// <param name="margin">水印边距: int</param> /// <returns>返回: 原图绘制水印的 system.drawing.bitmap 对象 system.drawing.bitmap</returns> public bitmap createwatermark(bitmap sbitmap, bitmap wbitmap, watermarkposition position, int margin) { graphics graphics = graphics.fromimage(sbitmap); graphics.drawimage(wbitmap, getwatermarkrectangle(position, sbitmap.width, sbitmap.height, wbitmap.width, wbitmap.height, margin)); graphics.dispose(); wbitmap.dispose(); return sbitmap; } #endregion 添加水印结束 #region 图片切割开始 #endregion 图片切割结束 #region 图片缩放开始 #endregion 图片缩放结束 #region 保存图片到文件开始 #region 普通保存开始 /// <summary> /// 保存: system.drawing.bitmap 对象到图片文件 /// </summary> /// <param name="bitmap">system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void save(bitmap bitmap, string writepath) { try { bitmap.save(writepath, getimageformat(getextension(writepath))); bitmap.dispose(); } catch { throw new argumentexception("图片保存错误"); } } /// <summary> /// 保存: 对象到图片文件 /// </summary> /// <param name="readpath">原图路径(包含完整路径,文件名及其扩展名): string</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void save(string readpath, string writepath) { if (string.compare(readpath, writepath) == 0) throw new argumentexception("源图片与目标图片地址相同"); try { save(new bitmap(readpath), writepath); } catch { throw new argumentexception("图片读取错误"); } } #endregion 普通保存结束 #region 文字绘图保存开始 #endregion 文字绘图保存结束 #region 透明度调整保存开始 /// <summary> /// 保存: 设置透明度的对象到图片文件 /// </summary> /// <param name="sbitmap">图片 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="transparence">水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void savetransparence(bitmap bitmap, float transparence, string writepath) { save(settransparence(bitmap, transparence), writepath); } /// <summary> /// 保存: 设置透明度的象到图片文件 /// </summary> /// <param name="readpath">原图路径(包含完整路径,文件名及其扩展名): string</param> /// <param name="transparence">水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void savetransparence(string readpath, float transparence, string writepath) { save(settransparence(readpath, transparence), writepath); } #endregion 透明度调整保存结束 #region 水印图片保存开始 /// <summary> /// 保存: 绘制水印的对象到图片文件 /// </summary> /// <param name="sbitmap">原图 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="wbitmap">水印 system.drawing.bitmap 对象: system.drawing.bitmap</param> /// <param name="position">枚举 uinatlex.toolbox.imagemanager.watermarkposition : uinatlex.toolbox.imagemanager.watermarkposition</param> /// <param name="margin">水印边距: int</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void savewatermark(bitmap sbitmap, bitmap wbitmap, watermarkposition position, int margin, string writepath) { save(createwatermark(sbitmap, wbitmap, position, margin), writepath); } /// <summary> /// 保存: 绘制水印的对象到图片文件 /// </summary> /// <param name="readpath">图片路径(包含完整路径,文件名及其扩展名): string</param> /// <param name="watermarkpath">水印图片路径(包含完整路径,文件名及其扩展名): string</param> /// <param name="transparence">水印透明度(值越高透明度越低,范围在0.0f~1.0f之间): float</param> /// <param name="position">枚举 uinatlex.toolbox.imagemanager.watermarkposition : uinatlex.toolbox.imagemanager.watermarkposition</param> /// <param name="margin">水印边距: int</param> /// <param name="writepath">保存路径(包含完整路径,文件名及其扩展名): string</param> public void savewatermark(string readpath, string watermarkpath, float transparence, watermarkposition position, int margin, string writepath) { if (string.compare(readpath, writepath) == 0) throw new argumentexception("源图片与目标图片地址相同"); if (transparence == 0.0f) save(readpath, writepath); else if (transparence == 1.0f) savewatermark(new bitmap(readpath), new bitmap(watermarkpath), position, margin, writepath); else savewatermark(new bitmap(readpath), settransparence(watermarkpath, transparence), position, margin, writepath); } #endregion 水印图片保存结束 #region 图片切割保存开始 #endregion 图片切割保存结束 #region 图片缩放保存开始 #endregion 图片缩放保存开始 #endregion 保存图片到文件结束 } } /* 调用很简单 im.savewatermark(原图地址, 水印地址, 透明度, 水印位置, 边距,保存位置); uinatlex.toolbox.imagemanager im = new uinatlex.toolbox.imagemanager(); im.savewatermark(server.mappath("/原图.jpg"), server.mappath("/水印.jpg"), 0.5f, uinatlex.toolbox.imagemanager.watermarkposition.rigthbottom, 10, server.mappath("/原图.jpg")); */
在客户端页面中调用上面这个类
protected void page_load(object sender, eventargs e) { string newfilename = server.mappath("img/") + datetime.now.millisecond + "" + datetime.now.second + ".jpg"; imagemanager im = new imagemanager(); //调用很简单 im.savewatermark(原图地址, 水印地址, 透明度, 水印位置, 边距,保存到的位置); im.savewatermark(server.mappath("img/chrysanthemum.jpg"), server.mappath("img/woshi.jpg"), 0.9f, imagemanager.watermarkposition.rigthbottom, 10, newfilename); }
总结
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!
网友评论