ASPNET图片加水印的实现代码.docx_第1页
ASPNET图片加水印的实现代码.docx_第2页
ASPNET图片加水印的实现代码.docx_第3页
ASPNET图片加水印的实现代码.docx_第4页
ASPNET图片加水印的实现代码.docx_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ASP.NET图片加水印的实现代码ASP.NET图片加水印的实现代码 本文介绍ASP.NET图片加水印的方法。水印为透明文字水印,可以定义文字水印的位置和透明度。 代码分几个部分,请查看代码中的注释。 using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; namespace DocMIS.AppConfig /*/ / 水印位置 / public enum ImagePosition /*/ / 左上 / LeftTop, /*/ / 左下 / LeftBottom, /*/ / 右上 / RightTop, /*/ / 右下 / RigthBottom, /*/ / 顶部居中 / TopMiddle, /*/ / 底部居中 / BottomMiddle, /*/ / 中心 / Center /*/ / 图像操作类(主要用于给图片加上透明文字水印) / class ImageWater_Word private string _ErrMsg; #region 出错信息 /*/ / 出错信息 / public string ErrMsg get return _ErrMsg; set _ErrMsg = value; #endregion #region 将文件转换成流 /public byte SetImageToByteArray(string fileName, ref string fileSize) /*/ / 将文件转换成流 / / 文件全路径 / private byte SetImageToByteArray(string fileName) byte image = null; try FileStream fs = new FileStream(fileName, FileMode.Open); FileInfo fileInfo = new FileInfo(fileName); /fileSize = Convert.ToDecimal(fileInfo.Length / 1024).ToString(f2) + K; int streamLength = (int)fs.Length; image = new bytestreamLength; fs.Read(image, 0, streamLength); fs.Close(); return image; catch return image; #endregion #region 将byte转换成MemoryStream类型 /*/ / ASP.NET图片加水印:将byte转换成MemoryStream类型 / / byte变量 / private MemoryStream ByteToStream(byte mybyte) MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length); return mymemorystream; #endregion #region 将byte转换成Image文件 /*/ / ASP.NET图片加水印:将byte转换成Image文件 / / byte变量 / private System.Drawing.Image SetByteToImage(byte mybyte) System.Drawing.Image image; MemoryStream mymemorystream = new MemoryStream(mybyte, 0, mybyte.Length); image = System.Drawing.Image.FromStream(mymemorystream); return image; #endregion #region 批量在图片上添加透明水印文字 /*/ / ASP.NET图片加水印:批量在图片上添加透明水印文字 / / 原来图片地址(路径+文件名) / 需要添加到图片上的文字 / 透明度(0.11.0之间) / 文字显示的位置 / 是否覆盖原图片(如果不覆盖,那么将在同目录下生成一个文件名带0607的文件) / public bool DrawWords(string arrsourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite) foreach (string imgPath in arrsourcePicture) if (!DrawWords(imgPath, waterWords, alpha, position, fRewrite) _ErrMsg += 处理文件: + imgPath + 时出错。; return false; return true; #endregion #region 在图片上添加透明水印文字 /*/ / ASP.NET图片加水印:在图片上添加透明水印文字 / / 原来图片地址(路径+文件名) / 需要添加到图片上的文字 / 透明度(0.11.0之间) / 文字显示的位置 / 是否覆盖原图片(如果不覆盖,那么将在同目录下生成一个文件名带0607的文件) / public bool DrawWords(string sourcePicture, string waterWords, float alpha, ImagePosition position, bool fRewrite) if (!System.IO.File.Exists(sourcePicture) _ErrMsg = 文件不存在; return false; string fileExtension = System.IO.Path.GetExtension(sourcePicture).ToLower(); if (fileExtension != .gif & fileExtension != .jpg & fileExtension != .png & fileExtension != .bmp) _ErrMsg = 不是图片文件; return false; Image imgPhoto = null; Bitmap bmPhoto = null; Graphics grPhoto = null; try /创建一个图片对象用来装载要被添加水印的图片 imgPhoto = Image.FromStream(ByteToStream(SetImageToByteArray(sourcePicture); /获取图片的宽和高 int phWidth = imgPhoto.Width; int phHeight = imgPhoto.Height; /建立一个bitmap,和我们需要加水印的图片一样大小 bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb); /SetResolution:设置此 Bitmap 的分辨率 /这里直接将我们需要添加水印的图片的分辨率赋给了bitmap bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution); /Graphics:封装一个 GDI+ 绘图图面。 grPhoto = Graphics.FromImage(bmPhoto); /设置图形的品质 grPhoto.SmoothingMode = SmoothingMode.AntiAlias; /将我们要添加水印的图片按照原始大小描绘(复制)到图形中 grPhoto.DrawImage( imgPhoto, / 要添加水印的图片 new Rectangle(0, 0, phWidth, phHeight), / 根据要添加的水印图片的宽和高 0, / X方向从0点开始描绘 0, / Y方向 phWidth, / X方向描绘长度 phHeight, / Y方向描绘长度 GraphicsUnit.Pixel); / 描绘的单位,这里用的是像素 /根据图片的大小我们来确定添加上去的文字的大小 /在这里我们定义一个数组来确定 int sizes = new int 48, 36, 28, 24, 16, 14, 12, 10 ; /字体 Font crFont = null; /矩形的宽度和高度,SizeF有三个属性,分别为Height高,width宽,IsEmpty是否为空 SizeF crSize = new SizeF(); /利用一个循环语句来选择我们要添加文字的型号 /直到它的长度比图片的宽度小 for (int i = 0; i sizes.Length; i+) crFont = new Font(arial, sizesi, FontStyle.Bold); /测量用指定的 Font 对象绘制并用指定的 StringFormat 对象格式化的指定字符串。 crSize = grPhoto.MeasureString(waterWords, crFont); / ushort 关键字表示一种整数数据类型 if (ushort)crSize.Width (ushort)phWidth) break; /截边5%的距离,定义文字显示(由于不同的图片显示的高和宽不同,所以按百分比截取) int yPixlesFromBottom = (int)(phHeight * .05); /定义在图片上文字的位置 float wmHeight = crSize.Height; float wmWidth = crSize.Width; float xPosOfWm; float yPosOfWm; /设置水印的位置 switch (position) case ImagePosition.BottomMiddle: xPosOfWm = phWidth / 2; yPosOfWm = phHeight - wmHeight - 10; break; case ImagePosition.Center: xPosOfWm = phWidth / 2; yPosOfWm = phHeight / 2; break; case ImagePosition.LeftBottom: xPosOfWm = wmWidth; yPosOfWm = phHeight - wmHeight - 10; break; case ImagePosition.LeftTop: xPosOfWm = wmWidth / 2; yPosOfWm = wmHeight / 2; break; case ImagePosition.RightTop: xPosOfWm = phWidth - wmWidth - 10; yPosOfWm = wmHeight; break; case ImagePosition.RigthBottom: xPosOfWm = phWidth - wmWidth - 10; yPosOfWm = phHeight - wmHeight - 10; break; case ImagePosition.TopMiddle: xPosOfWm = phWidth / 2; yPosOfWm = wmWidth; break; default: xPosOfWm = wmWidth; yPosOfWm = phHeight - wmHeight - 10; break; /封装文本布局信息(如对齐、文字方向和 Tab 停靠位),显示操作(如省略号插入和国家标准 (National) 数字替换)和 OpenType 功能。 StringFormat StrFormat = new StringFormat(); /定义需要印的文字居中对齐 StrFormat.Alignment = StringAlignment.Center; /SolidBrush:定义单色画笔。画笔用于填充图形形状,如矩形、椭圆、扇形、多边形和封闭路径。 /这个画笔为描绘阴影的画笔,呈灰色 int m_alpha = Convert.ToInt32(256 * alpha); SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0); /描绘文字信息,这个图层向右和向下偏移一个像素,表示阴影效果 /DrawString 在指定矩形并且用指定的 Brush 和 Font 对象绘制指定的文本字符串。 grPhoto.DrawString(waterWords, /string of text crFont, /font semiTransBrush2, /Brush new PointF(xPosOfWm + 1, yPosOfWm + 1), /Position StrFormat); /从四个 ARGB 分量(alpha、红色、绿色和蓝色)值创建 Color 结构,这里设置透明度为153 /这个画笔为描绘正式文字的笔刷,呈白色 SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255); /第二次绘制这个图形,建立在第一次描绘的基础上 grPhoto.DrawString(waterWords, /string of text crFont, /font semiTransBrush, /B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论