




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C#制作图案水印using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;namespace cj.Tools/*/ 图像操作类(主要用于给图片加上透明文字水印)/public class ImageWater_Word#region 添加水印/ / 添加水印/ / / / / / / / public byte DrawImage(byte picBt, string waterWords, float alpha, PointF posf, bool fRewrite, Color color)Image imgPho = null;Bitmap bmPho = null;Graphics grPho = null;MemoryStream meoStr = new MemoryStream(picBt, 0, picBt.Length);imgPho = Image.FromStream(meoStr);int phWidth = imgPho.Width;int phHeight = imgPho.Height;bmPho = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);bmPho.SetResolution(imgPho.HorizontalResolution, imgPho.VerticalResolution);grPho = Graphics.FromImage(bmPho);grPho.SmoothingMode = SmoothingMode.AntiAlias;grPho.DrawImage(imgPho, new Rectangle(0, 0, phWidth, phHeight), 0, 0, phWidth, phHeight, GraphicsUnit.Pixel);Font crFont = null;SizeF crSize = new SizeF();crFont = new Font(arial, 9, FontStyle.Bold);crSize = grPho.MeasureString(waterWords, crFont);int yPixlesFromBottom = (int)(phHeight * .05);/定义在图片上文字的位置float wmHeight = crSize.Height;float wmWidth = crSize.Width;float xPosOfWm = posf.X * 3;float yPosOfWm = posf.Y * 2;StringFormat StrFormat = new StringFormat(); /定义需要印的文字居中对齐StrFormat.Alignment = StringAlignment.Center;int m_alpha = Convert.ToInt32(256 * alpha);SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(m_alpha, 0, 0, 0);grPho.DrawString(waterWords, /string of textcrFont, /fontsemiTransBrush2, /Brushnew PointF(xPosOfWm + 1, yPosOfWm + 1), /PositionStrFormat);SolidBrush semiTransBrush = new SolidBrush(color);grPho.DrawString(waterWords, /string of textcrFont, /fontsemiTransBrush, /Brushnew PointF(xPosOfWm, yPosOfWm), /PositionStrFormat);imgPho = bmPho;/imgPho.Save(d:a.jpg);return SetImageToByte(imgPho);#endregionprivate string _ErrMsg;#region 出错信息/*/出错信息/public string ErrMsgget return _ErrMsg; set _ErrMsg = value; #endregion#region 将文件转换成流/ 将文件转换成流/文件全路径/private byte SetImageToByteArray(string fileName)byte image = null;tryFileStream fs = new FileStream(fileName, FileMode.Open);FileInfo fileInfo = new FileInfo(fileName);int streamLength = (int)fs.Length;image = new bytestreamLength;fs.Read(image, 0, streamLength);fs.Close();return image;catchreturn 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, PointF position, bool fRewrite, Color color, string filename)foreach (string imgPath in arrsourcePicture)if (!DrawWords(imgPath, waterWords, alpha, position, fRewrite, color, filename)_ErrMsg += 处理文件: + imgPath + 时出错。;return false;return true;#endregion#region 在图片上添加透明水印文字/ / ASP.NET图片加水印:在图片上添加透明水印文字/ / 原来图片地址(路径+文件名)/ 需要添加到图片上的文字/ 透明度(0.11.0之间)/ 文字显示的位置/ 是否覆盖原图片(如果不覆盖,那么将在同目录下生成一个文件名带0607的文件)/ 生成水印的颜色/ 生成生水印的文件名(名字为原文件+_+自定义名)/ public bool DrawWords(string sourcePicture, string waterWords, float alpha, PointF position, bool fRewrite, Color color, string filename)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 的分辨率/这里直接将我们需要添加水印的图片的分辨率赋给了bitmapbmPhoto.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 = position.X;float yPosOfWm = position.Y; /设置水印的位置#region/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 功能。#endregionStringFormat 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 textcrFont, /fontsemiTransBrush2, /Brushnew PointF(xPosOfWm + 1, yPosOfWm + 1), /PositionStrFormat);/从四个 ARGB 分量(alpha、红色、绿色和蓝色)值创建 Color 结构,这里设置透明度为153/这个画笔为描绘正式文字的笔刷,呈白色SolidBrush semiTransBrush = new SolidBrush(color);/第二次绘制这个图形,建立在第一次描绘的基础上grPhoto.DrawString(waterWords, /string of textcrFont, /fontsemiTransBrush, /Brushnew PointF(xPosOfWm, yPosOfWm), /PositionStrFormat);/imgPhoto是我们建立的用来装载最终图形的Image对象/bmPhoto是我们用来制作图形的容器,为Bitmap对象imgPhoto = bmPhoto;/释放资源,将定义的Graphics实例grPhoto释放,grPhoto功德
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 429 - 1999单爪锚》新解读
- 化学●海南卷丨2022年海南省普通高中学业水平选择性考试高考化学真题试卷及答案
- 路基人字行骨架防护施工方案
- 基坑开挖工艺流程
- 北师大版(2019) 必修第三册 Unit 9 Learning Lesson 2 Language Learning Tips课件(内嵌音频)
- 基于双球模型改进的眼动追踪算法研究
- 浙江省丽水市2022-2023学年高二下学期普通高中期末教学质量检测化学试题(含答案)
- 汽车传感器与检测技术电子教案:地磁方位传感器
- 物理中考一轮复习教案 第三讲 熔化和凝固、升华和凝华、水循环
- 仓库扩容打折活动方案
- 患者跌倒的预防及管理课件
- 高院民一庭负责人答记者问:最高院《关于审理城镇房屋租赁合同纠纷案件具体应用法律若干问题的解释》
- 体检报告单入职体检模板
- 工作计划及进度表
- 铺麻醉床技术操作评分标准
- 管道焊接及焊缝外观检查记录表
- 回油管夹片的冲压工艺与模具设计
- 个体化健康教育
- 《白内障》ppt课件
- Resume(简历英文版)
- 报价单模板(中英文
评论
0/150
提交评论