///<summary> /// 添加图片水印 /// </summary> /// <param name="watermarkImageFile">水印图片</param> /// <param name="sourceImageFile">原文件</param> /// <param name="position">水印位置</param> /// 时间:2015-12-17 15:48 /// 备注: public static void AttachPng(string watermarkImageFile, string sourceImageFile, ImgWaterPosition position) { string sourceImgTmpPath = sourceImageFile.CreateTempFilePath(); Image sourceImg = Image.FromFile(sourceImgTmpPath); ImageFormat sourceImgFmt = sourceImg.RawFormat; int sourceImgH = sourceImg.Height, sourceImaW = sourceImg.Width; using (Bitmap sourceBmp = new Bitmap(sourceImaW, sourceImgH)) { using (Graphics graphics = Graphics.FromImage(sourceBmp)) { // 设置画布的描绘质量 graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(sourceImg, new Rectangle(0, 0, sourceImaW, sourceImgH), 0, 0, sourceImaW, sourceImgH, GraphicsUnit.Pixel); sourceImg.Dispose(); sourceImg = Image.FromFile(watermarkImageFile); SetWaterMarkImagePosition(graphics, sourceImg, sourceImaW, sourceImgH, position); } SetWaterMarkImageQuality(sourceBmp, sourceImageFile, sourceImgFmt); sourceImg.Dispose(); } File.Delete(sourceImgTmpPath); }
private static void SetWaterMarkImagePosition(Graphics sourceG, Image sourceImage, int sourceImageWidth, int sourceImageHight, ImgWaterPosition position) { Size sourceSize = CreateImageSize(sourceImageWidth, sourceImageHight, sourceImage); int x = 0, y = 0, padding = 10; switch (position) { case ImgWaterPosition.Center: x = (sourceImageWidth - sourceSize.Width) / 2; y = (sourceImageHight - sourceSize.Height) / 2; break; case ImgWaterPosition.TopLeft: x = padding; y = padding; break; case ImgWaterPosition.TopRight: x = (sourceImageWidth - sourceSize.Width) - padding; y = padding; break; case ImgWaterPosition.BottomLeft: x = padding; y = (sourceImageHight - sourceSize.Height) - padding; break; default: x = (sourceImageWidth - sourceSize.Width) - padding; y = (sourceImageHight - sourceSize.Height) - padding; break; } sourceG.DrawImage(sourceImage, new Rectangle(x, y, sourceSize.Width, sourceSize.Height), 0, 0, sourceImage.Width, sourceImage.Height, GraphicsUnit.Pixel); }