代码如下:
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Drawing.Drawing2D; using System.Drawing; using System.Drawing.Imaging; namespace MyWaterMark { /// <summary> /// WaterMark 的摘要说明 /// </summary> /// edit by www.jb200.com /// <param name="strCopyright">要加入的文字 </param> /// <param name="strCopyrightColor">要加入的文字颜色 </param> /// <param name="strMarkPath">水印图片路径 </param> /// <param name="strPhotoPath">要加水印的图片路径 </param> /// <param name="strSavePath">处理后的图片路径 </param> /// <param name="iMarkRightSpace">水印在修改图片中距左边的宽度 </param> /// <param name="iMarkButtomSpace">水印在修改图片中距底部的高度 </param> /// <param name="iDiaphaneity">水印图片的透明度 </param> /// <param name="iFontRightSpace">文字 </param> /// <param name="iFontButtomSpace">文字 </param> /// <param name="iFontDiaphaneity">文字 </param> /// <param name="bShowCopyright">是否显示文字 </param> /// <param name="bShowMarkImage">是否显示水印图片 </param> public class WaterMark { #region param private string strCopyright, strMarkPath, strPhotoPath, strSavePath; private int iMarkRightSpace, iMarkButtomSpace, iDiaphaneity; private int iFontRightSpace = 0, iFontButtomSpace = 0, iFontDiaphaneity = 80; private int iFontSize = 10; private bool bShowCopyright = true, bShowMarkImage = true; private int red = 0, greed = 0, blue = 0; Image imageBit=null; #endregion #region WaterMark public WaterMark() { this.strCopyright = ""; this.strMarkPath = null; this.strPhotoPath = null; this.strSavePath = null; this.iDiaphaneity = 70; this.iMarkRightSpace = 0; this.iMarkButtomSpace = 0; } /// <summary> /// 主要用两样都加的 /// </summary> public WaterMark(string copyright, string copyrightColor, string markPath, string photoPath,Image imageBitT, string savePath,int apha) { this.strCopyright = copyright; this.strMarkPath = markPath; this.strPhotoPath = photoPath; this.strSavePath = savePath; this.iDiaphaneity = apha; this.iMarkRightSpace = 0; this.iMarkButtomSpace = 0; this.imageBit = imageBitT; try { Color my = new Color(); if (copyrightColor.IndexOf("#") >= 0) { my = ColorTranslator.FromHtml(copyrightColor); } else { my = Color.FromName(copyrightColor); } this.red = my.R; this.greed = my.G; this.blue = my.B; } catch (Exception) { } } #endregion #region property /// <summary> /// 设置是否显示水印文字 /// </summary> public bool ShowCopyright { set { this.bShowCopyright = value; } } /// <summary> /// 设置是否显示水印图片 /// </summary> public bool ShowMarkImage { set { this.bShowMarkImage = value; } } /// <summary> /// 获取或设置要加入的文字 /// </summary> public string Copyright { set { this.strCopyright = value; } } /// <summary> /// 设置要加入的文字颜色 /// </summary> public bool strCopyrightColor { set { Color my = new Color(); if (value.ToString().IndexOf("#") >= 0) { my = ColorTranslator.FromHtml(value.ToString()); } else { my = Color.FromName(value.ToString()); } this.red = my.R; this.greed = my.G; this.blue = my.B; } } /// <summary> /// 获取或设置加水印后的图片路径 /// </summary> public string SavePath { get { return this.strSavePath; } set { this.strSavePath = value; } } /// <summary> /// 获取或设置水印图片路径 /// </summary> public string MarkPath { get { return this.strMarkPath; } set { this.strMarkPath = value; } } /// <summary> /// 获取或设置要加水印图片的路径 /// </summary> public string PhotoPath { get { return this.strPhotoPath; } set { this.strPhotoPath = value; } } /// <summary> /// 设置水印图片的透明度 /// </summary> public int Diaphaneity { set { if (value > 0 && value <= 100) this.iDiaphaneity = value; } } /// <summary> /// 设置水印字体的透明度0-255 /// </summary> public int FontDiaphaneity { set { if (value >= 0 && value <= 255) this.iFontDiaphaneity = value; } } public int FontSize { set { iFontSize = Convert.ToInt32(value); } } /// <summary> /// 设置水印图片在修改图片中距左边的宽度 /// </summary> public int MarkRightSpace { set { this.iMarkRightSpace = value; } } /// <summary> /// 设置水印图片在修改图片中距底部的高度 /// </summary> public int MarkButtomSpace { set { this.iMarkButtomSpace = value; } } /// <summary> /// 设置水印字体在修改图片中距左边的距离 /// </summary> public int FontRightSpace { set { iFontRightSpace = value; } } /// <summary> /// 设置水印字体在修改图片中距底部的高度 /// </summary> public int FontButtomSpace { set { iFontButtomSpace = value; } } #endregion /// <summary> /// 生成水印图片 /// </summary> /// <returns> </returns> public Image createMarkPhoto() { Image gPhoto=null; Bitmap bmWatermark = null; if (this.strPhotoPath == "" || this.strPhotoPath == null) { gPhoto = this.imageBit; } else { gPhoto = Image.FromFile(this.strPhotoPath); } int PhotoWidth = gPhoto.Width; int PhotoHeight = gPhoto.Height; Bitmap bitPhoto = new Bitmap(PhotoWidth, PhotoHeight, PixelFormat.Format24bppRgb); bitPhoto.SetResolution(gPhoto.HorizontalResolution, gPhoto.VerticalResolution); try { if (bShowCopyright) { Graphics grPhoto = Graphics.FromImage(bitPhoto); grPhoto.SmoothingMode = SmoothingMode.Antialias; grPhoto.DrawImage(gPhoto, new Rectangle(0, 0, PhotoWidth, PhotoHeight), 0, 0, PhotoWidth, PhotoHeight, GraphicsUnit.Pixel); Font crFont = new Font("楷体", iFontSize, FontStyle.Bold); SizeF crSize = grPhoto.MeasureString(strCopyright, crFont); //设置字体在图片中的位置 float yPosFromBottom = PhotoHeight - iFontButtomSpace - (crSize.Height); //float xCenterOfImg = (phWidth/2); float xCenterOfImg = PhotoWidth - iFontRightSpace - (crSize.Width / 2); //设置字体居中 StringFormat StrFormat = new StringFormat(); StrFormat.Alignment = StringAlignment.Center; //设置绘制文本的颜色和纹理 (Alpha=153) SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(this.iFontDiaphaneity, this.red, this.greed, this.blue)); //将版权信息绘制到图象上 grPhoto.DrawString(strCopyright, crFont, semiTransBrush2, new PointF(xCenterOfImg, yPosFromBottom), StrFormat); gPhoto = bitPhoto; grPhoto.Dispose(); } if (bShowMarkImage && strMarkPath != "" && strMarkPath != null) { //创建一个需要填充水银的Image对象 Image imgWatermark = new Bitmap(strMarkPath); int iMarkWidth = imgWatermark.Width; int iMarkmHeight = imgWatermark.Height; Graphics grWatermark = null; if (bShowCopyright) { //在原来修改过的bmPhoto上创建一个水银位图 bmWatermark = new Bitmap(bitPhoto); bmWatermark.SetResolution(gPhoto.HorizontalResolution, gPhoto.VerticalResolution); } else { bmWatermark = new Bitmap(gPhoto); } //将位图bmWatermark加载到Graphics对象 grWatermark = Graphics.FromImage(bmWatermark); ImageAttributes imageAttributes = new ImageAttributes(); ColorMap colorMap = new ColorMap(); colorMap.OldColor = Color.FromArgb(255, 0, 255, 0); colorMap.NewColor = Color.FromArgb(0, 0, 0, 0); ColorMap[] remapTable = { colorMap }; imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap); float[][] colorMatrixElements = { 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, (float)iDiaphaneity/100f, 0.0f}, new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}}; ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements); imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); grWatermark.DrawImage(imgWatermark, new Rectangle((PhotoWidth - iMarkRightSpace - (iMarkWidth / 2)), (PhotoHeight - iMarkButtomSpace - (iMarkmHeight / 2)), iMarkWidth, iMarkmHeight), 0, 0, iMarkWidth, iMarkmHeight, GraphicsUnit.Pixel, imageAttributes); gPhoto = bmWatermark; grWatermark.Dispose(); imgWatermark.Dispose(); } if (strSavePath == "" || strSavePath == null) { //if (bitPhoto != null) // bitPhoto.Dispose(); //if (bmWatermark != null) // bmWatermark.Dispose(); return gPhoto; } else { gPhoto.Save(strSavePath, ImageFormat.Jpeg ); if (bitPhoto != null) bitPhoto.Dispose(); if (bmWatermark != null) bmWatermark.Dispose(); gPhoto.Dispose(); return null; } } finally { } } } }