C#图片处理基本应用(裁剪,缩放,清晰度,水印)
来源:互联网 发布:鼠标自动点击器 mac 编辑:程序博客网 时间:2024/05/21 10:48
C#图片处理基本应用(裁剪,缩放,清晰度,水印)
吴剑
http://wu-jian.cnblogs.com/
前言
需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示。随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者会发现一些问题,比如显示排版时想让相片缩略图列表非常统一、整齐、和美观,比如要求每张缩略图大小固定为120 x 90且不拉伸变形怎么办?再比如用户头像如何让缩略图比原图更清晰?或是如何在上传的图片下加一个半透明的LOGO水印?
OK,本文根据自己的项目代码描述以上问题的解决方案,全部基于.Net Framework类库完成,代码中包含了C#图片处理的一些基础知识,与大家分享,个人能力有限,不足之处还请及时指正。
提高缩略图清晰度
(原图200*200,12.3k)(处理后80*80,17.7k)
之前一直认为缩略图不可能比原图清晰,直到某天一位产品的同事给我看某网站的效果。于是开始寻找.NET下实现代码,仔细观察缩略图确实比原图更清晰了一些,但代价是缩略图文件比原图更大,所以如果你想让一张占满显示器屏幕的超大图片更清晰,那么图片占用空间和网络流量就必需考虑了,如果是互联网应用,建议缩略图在200像素以内的使用该方法。当然如果哪位有更好的代码即能让图片文件大小变化不大又让图片更清晰还请分享。
图片裁剪
(原图256*192)(裁剪要求100*100)
(原图256*192)(裁剪要求90*120)
(原图256*192)(裁剪要求120*90)
(原图146*256)(裁剪要求100*100)
(原图146*256)(裁剪要求90*120)
(原图146*256)(裁剪要求120*90)
算法:以原图中心作为裁剪中心,最大范围的对原图进行裁剪,然后对裁剪结果等比缩放。
图片水印
仅演示了效果,如需要变更字体、水印透明度、位置等可自行在代码或方法中扩展。
代码
封装了几个通用的方法,如发现有BUG或漏洞还请及时指正。
0001 using System;0002 using System.Collections.Generic;0003 using System.Text;0004 using System.IO;0005 using System.Drawing;0006 using System.Drawing.Drawing2D;0007 using System.Drawing.Imaging;0008 namespace WuJian.Common0009 {0010 ///0011 /// 图片处理类0012 /// 吴剑 2008-07-02 创建0013 /// 吴剑 2011-01-21 修改0014 /// 0015 public class PTImage0016 {0017 #region 正方型裁剪并缩放0018 /// 0019 /// 正方型裁剪0020 /// 以图片中心为轴心,截取正方型,然后等比缩放0021 /// 用于头像处理0022 /// 0023 /// 吴剑 2010-11-23 0024 /// 原图HttpPostedFile对象0025 /// 缩略图存放地址0026 /// 指定的边长(正方型)0027 /// 质量(范围0-100)0028 public static void CutForSquare(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int side, int quality)0029 {0030 //创建目录0031 string dir = Path.GetDirectoryName(fileSaveUrl);0032 if (!Directory.Exists(dir))0033 Directory.CreateDirectory(dir);0034 //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0035 System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0036 //原图宽高均小于模版,不作处理,直接保存0037 if (initImage.Width <= side && initImage.Height <= side)0038 {0039 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0040 }0041 else0042 {0043 //原始图片的宽、高0044 int initWidth = initImage.Width;0045 int initHeight = initImage.Height;0046 //非正方型先裁剪为正方型0047 if (initWidth != initHeight)0048 {0049 //截图对象0050 System.Drawing.Image pickedImage = null;0051 System.Drawing.Graphics pickedG = null;0052 //宽大于高的横图0053 if (initWidth > initHeight)0054 {0055 //对象实例化0056 pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);0057 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0058 //设置质量0059 pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0060 pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0061 //定位0062 Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);0063 Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);0064 //画图0065 pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0066 //重置宽0067 initWidth = initHeight;0068 }0069 //高大于宽的竖图0070 else0071 {0072 //对象实例化0073 pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);0074 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0075 //设置质量0076 pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0077 pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0078 //定位0079 Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);0080 Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);0081 //画图0082 pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0083 //重置高0084 initHeight = initWidth;0085 }0086 //将截图对象赋给原图0087 initImage = (System.Drawing.Image)pickedImage.Clone();0088 //释放截图资源0089 pickedG.Dispose();0090 pickedImage.Dispose();0091 }0092 //缩略图对象0093 System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);0094 System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);0095 //设置质量0096 resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0097 resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0098 //用指定背景色清空画布0099 resultG.Clear(Color.White);0100 //绘制缩略图0101 resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);0102 //关键质量控制0103 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0104 ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0105 ImageCodecInfo ici = null;0106 foreach (ImageCodecInfo i in icis)0107 {0108 if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0109 {0110 ici = i;0111 }0112 }0113 EncoderParameters ep = new EncoderParameters(1);0114 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0115 //保存缩略图0116 resultImage.Save(fileSaveUrl, ici, ep);0117 //释放关键质量控制所用资源0118 ep.Dispose();0119 //释放缩略图资源0120 resultG.Dispose();0121 resultImage.Dispose();0122 //释放原始图片资源0123 initImage.Dispose();0124 }0125 }0126 ///0127 /// 正方型裁剪0128 /// 以图片中心为轴心,截取正方型,然后等比缩放0129 /// 用于头像处理0130 /// 0131 /// 吴剑 2010-11-23 0132 /// 原图HttpPostedFile对象0133 /// 缩略图存放地址0134 /// 指定的边长(正方型)0135 /// 质量(范围0-100)0136 public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)0137 {0138 //创建目录0139 string dir = Path.GetDirectoryName(fileSaveUrl);0140 if (!Directory.Exists(dir))0141 Directory.CreateDirectory(dir);0142 //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0143 System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);0144 //原图宽高均小于模版,不作处理,直接保存0145 if (initImage.Width <= side && initImage.Height <= side)0146 {0147 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0148 }0149 else0150 {0151 //原始图片的宽、高0152 int initWidth = initImage.Width;0153 int initHeight = initImage.Height;0154 //非正方型先裁剪为正方型0155 if (initWidth != initHeight)0156 {0157 //截图对象0158 System.Drawing.Image pickedImage = null;0159 System.Drawing.Graphics pickedG = null;0160 //宽大于高的横图0161 if (initWidth > initHeight)0162 {0163 //对象实例化0164 pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);0165 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0166 //设置质量0167 pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0168 pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0169 //定位0170 Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);0171 Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);0172 //画图0173 pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0174 //重置宽0175 initWidth = initHeight;0176 }0177 //高大于宽的竖图0178 else0179 {0180 //对象实例化0181 pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);0182 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0183 //设置质量0184 pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0185 pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0186 //定位0187 Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);0188 Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);0189 //画图0190 pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0191 //重置高0192 initHeight = initWidth;0193 }0194 //将截图对象赋给原图0195 initImage = (System.Drawing.Image)pickedImage.Clone();0196 //释放截图资源0197 pickedG.Dispose();0198 pickedImage.Dispose();0199 }0200 //缩略图对象0201 System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);0202 System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);0203 //设置质量0204 resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0205 resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0206 //用指定背景色清空画布0207 resultG.Clear(Color.White);0208 //绘制缩略图0209 resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);0210 //关键质量控制0211 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0212 ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0213 ImageCodecInfo ici = null;0214 foreach (ImageCodecInfo i in icis)0215 {0216 if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0217 {0218 ici = i;0219 }0220 }0221 EncoderParameters ep = new EncoderParameters(1);0222 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0223 //保存缩略图0224 resultImage.Save(fileSaveUrl, ici, ep);0225 //释放关键质量控制所用资源0226 ep.Dispose();0227 //释放缩略图资源0228 resultG.Dispose();0229 resultImage.Dispose();0230 //释放原始图片资源0231 initImage.Dispose();0232 }0233 }0234 #endregion0235 #region 固定模版裁剪并缩放0236 ///0237 /// 指定长宽裁剪0238 /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸0239 /// 0240 /// 吴剑 2010-11-15 0241 /// 原图HttpPostedFile对象0242 /// 保存路径0243 /// 最大宽(单位:px)0244 /// 最大高(单位:px)0245 /// 质量(范围0-100)0246 public static void CutForCustom(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int maxWidth, int maxHeight, int quality)0247 {0248 //从文件获取原始图片,并使用流中嵌入的颜色管理信息0249 System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0250 //原图宽高均小于模版,不作处理,直接保存0251 if (initImage.Width <= maxWidth && initImage.Height <= maxHeight)0252 {0253 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0254 }0255 else0256 {0257 //模版的宽高比例0258 double templateRate = (double)maxWidth / maxHeight;0259 //原图片的宽高比例0260 double initRate = (double)initImage.Width / initImage.Height;0261 //原图与模版比例相等,直接缩放0262 if (templateRate == initRate)0263 {0264 //按模版大小生成最终图片0265 System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);0266 System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);0267 templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;0268 templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0269 templateG.Clear(Color.White);0270 templateG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);0271 templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0272 }0273 //原图与模版比例不等,裁剪后缩放0274 else0275 {0276 //裁剪对象0277 System.Drawing.Image pickedImage = null;0278 System.Drawing.Graphics pickedG = null;0279 //定位0280 Rectangle fromR = new Rectangle(0, 0, 0, 0);//原图裁剪定位0281 Rectangle toR = new Rectangle(0, 0, 0, 0);//目标定位0282 //宽为标准进行裁剪0283 if (templateRate > initRate)0284 {0285 //裁剪对象实例化0286 pickedImage = new System.Drawing.Bitmap(initImage.Width, (int)Math.Floor(initImage.Width / templateRate));0287 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0288 //裁剪源定位0289 fromR.X = 0;0290 fromR.Y = (int)Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);0291 fromR.Width = initImage.Width;0292 fromR.Height = (int)Math.Floor(initImage.Width / templateRate);0293 //裁剪目标定位0294 toR.X = 0;0295 toR.Y = 0;0296 toR.Width = initImage.Width;0297 toR.Height = (int)Math.Floor(initImage.Width / templateRate);0298 }0299 //高为标准进行裁剪0300 else0301 {0302 pickedImage = new System.Drawing.Bitmap((int)Math.Floor(initImage.Height * templateRate), initImage.Height);0303 pickedG = System.Drawing.Graphics.FromImage(pickedImage);0304 fromR.X = (int)Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);0305 fromR.Y = 0;0306 fromR.Width = (int)Math.Floor(initImage.Height * templateRate);0307 fromR.Height = initImage.Height;0308 toR.X = 0;0309 toR.Y = 0;0310 toR.Width = (int)Math.Floor(initImage.Height * templateRate);0311 toR.Height = initImage.Height;0312 }0313 //设置质量0314 pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0315 pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0316 //裁剪0317 pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0318 //按模版大小生成最终图片0319 System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);0320 System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);0321 templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;0322 templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0323 templateG.Clear(Color.White);0324 templateG.DrawImage(pickedImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, pickedImage.Width, pickedImage.Height), System.Drawing.GraphicsUnit.Pixel);0325 //关键质量控制0326 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0327 ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0328 ImageCodecInfo ici = null;0329 foreach (ImageCodecInfo i in icis)0330 {0331 if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0332 {0333 ici = i;0334 }0335 }0336 EncoderParameters ep = new EncoderParameters(1);0337 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0338 //保存缩略图0339 templateImage.Save(fileSaveUrl, ici, ep);0340 //templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0341 //释放资源0342 templateG.Dispose();0343 templateImage.Dispose();0344 pickedG.Dispose();0345 pickedImage.Dispose();0346 }0347 }0348 //释放资源0349 initImage.Dispose();0350 }0351 #endregion0352 #region 等比缩放0353 ///0354 /// 图片等比缩放0355 /// 0356 /// 吴剑 2011-01-21 0357 /// 原图HttpPostedFile对象0358 /// 缩略图存放地址0359 /// 指定的最大宽度0360 /// 指定的最大高度0361 /// 水印文字(为""表示不使用水印)0362 /// 水印图片路径(为""表示不使用水印)0363 public static void ZoomAuto(System.Web.HttpPostedFile postedFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)0364 {0365 //创建目录0366 string dir = Path.GetDirectoryName(savePath);0367 if (!Directory.Exists(dir))0368 Directory.CreateDirectory(dir);0369 //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0370 System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0371 //原图宽高均小于模版,不作处理,直接保存0372 if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)0373 {0374 //文字水印0375 if (watermarkText != "")0376 {0377 using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(initImage))0378 {0379 System.Drawing.Font fontWater = new Font("黑体", 10);0380 System.Drawing.Brush brushWater = new SolidBrush(Color.White);0381 gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);0382 gWater.Dispose();0383 }0384 }0385 //透明图片水印0386 if (watermarkImage != "")0387 {0388 if (File.Exists(watermarkImage))0389 {0390 //获取水印图片0391 using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))0392 {0393 //水印绘制条件:原始图片宽高均大于或等于水印图片0394 if (initImage.Width >= wrImage.Width && initImage.Height >= wrImage.Height)0395 {0396 Graphics gWater = Graphics.FromImage(initImage);0397 //透明属性0398 ImageAttributes imgAttributes = new ImageAttributes();0399 ColorMap colorMap = new ColorMap();0400 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);0401 colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);0402 ColorMap[] remapTable = { colorMap };0403 imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);0404 float[][] colorMatrixElements = { 0405 new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},0406 new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},0407 new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},0408 new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.50409 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}0410 };0411 ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);0412 imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);0413 gWater.DrawImage(wrImage, new Rectangle(initImage.Width - wrImage.Width, initImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);0414 gWater.Dispose();0415 }0416 wrImage.Dispose();0417 }0418 }0419 }0420 //保存0421 initImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);0422 }0423 else0424 {0425 //缩略图宽、高计算0426 double newWidth = initImage.Width;0427 double newHeight = initImage.Height;0428 //宽大于高或宽等于高(横图或正方)0429 if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)0430 {0431 //如果宽大于模版0432 if (initImage.Width > targetWidth)0433 {0434 //宽按模版,高按比例缩放0435 newWidth = targetWidth;0436 newHeight = initImage.Height * (targetWidth / initImage.Width);0437 }0438 }0439 //高大于宽(竖图)0440 else0441 {0442 //如果高大于模版0443 if (initImage.Height > targetHeight)0444 {0445 //高按模版,宽按比例缩放0446 newHeight = targetHeight;0447 newWidth = initImage.Width * (targetHeight / initImage.Height);0448 }0449 }0450 //生成新图0451 //新建一个bmp图片0452 System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);0453 //新建一个画板0454 System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);0455 //设置质量0456 newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0457 newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0458 //置背景色0459 newG.Clear(Color.White);0460 //画图0461 newG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, newImage.Width, newImage.Height), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);0462 //文字水印0463 if (watermarkText != "")0464 {0465 using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(newImage))0466 {0467 System.Drawing.Font fontWater = new Font("宋体", 10);0468 System.Drawing.Brush brushWater = new SolidBrush(Color.White);0469 gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);0470 gWater.Dispose();0471 }0472 }0473 //透明图片水印0474 if (watermarkImage != "")0475 {0476 if (File.Exists(watermarkImage))0477 {0478 //获取水印图片0479 using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))0480 {0481 //水印绘制条件:原始图片宽高均大于或等于水印图片0482 if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height)0483 {0484 Graphics gWater = Graphics.FromImage(newImage);0485 //透明属性0486 ImageAttributes imgAttributes = new ImageAttributes();0487 ColorMap colorMap = new ColorMap();0488 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);0489 colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);0490 ColorMap[] remapTable = { colorMap };0491 imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);0492 float[][] colorMatrixElements = { 0493 new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},0494 new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},0495 new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},0496 new float[] {0.0f, 0.0f, 0.0f, 0.5f, 0.0f},//透明度:0.50497 new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}0498 };0499 ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);0500 imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);0501 gWater.DrawImage(wrImage, new Rectangle(newImage.Width - wrImage.Width, newImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);0502 gWater.Dispose();0503 }0504 wrImage.Dispose();0505 }0506 }0507 }0508 //保存缩略图0509 newImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);0510 //释放资源0511 newG.Dispose();0512 newImage.Dispose();0513 initImage.Dispose();0514 }0515 }0516 #endregion0517 #region 其它0518 ///0519 /// 判断文件类型是否为WEB格式图片0520 /// (注:JPG,GIF,BMP,PNG)0521 /// 0522 /// HttpPostedFile.ContentType0523 /// 0524 public static bool IsWebImage(string contentType)0525 {0526 if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png")0527 {0528 return true;0529 }0530 else0531 {0532 return false;0533 }0534 }0535 #endregion0536 }//end class0537 }
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- C#图片处理高级应用(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- C#图片处理示例(裁剪,缩放,清晰度,水印)
- 打印自定义菱形
- UE32 删除空行正则表达式
- struts 2 的配置问题
- NPO PB问题之:Minimum 3-dimensional assignment
- MTK手机软件系统工程和配置简介
- C#图片处理基本应用(裁剪,缩放,清晰度,水印)
- About insert sql on duplicate key update
- 第一帖
- 菜鸟的起点
- 程序出错后 程序员给测试人员的20条高频回复
- 【转】Linux各种信号
- 家园守卫战关于提升双倍还是提升攻速的建议
- 关于Android平台下的H264客户端
- linux目录名称改回英文