转:C#图片处理类(裁剪,缩放,清晰度,水印)

using System;  



using System.Collections.Generic;  



using System.Text;  



using System.IO;  



using System.Drawing;  



using System.Drawing.Drawing2D;  



using System.Drawing.Imaging;  



   



namespace WuJian.Common  



{  



    /// <summary>  



    /// 图片处理类  



    /// 吴剑 2008-07-02 创建  



    /// 吴剑 2011-01-21 修改  



    /// </summary>  



    public class PTImage  



    {  



        #region 正方型裁剪并缩放  



        /// <summary>  



        /// 正方型裁剪  



        /// 以图片中心为轴心,截取正方型,然后等比缩放  



        /// 用于头像处理  



        /// </summary>  



        /// <remarks>吴剑 2010-11-23</remarks>  



        /// <param name="postedFile">原图HttpPostedFile对象</param>  



        /// <param name="fileSaveUrl">缩略图存放地址</param>  



        /// <param name="side">指定的边长(正方型)</param>  



        /// <param name="quality">质量(范围0-100)</param>  



        public static void CutForSquare(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int side, int quality)  



        {  



            //创建目录  



            string dir = Path.GetDirectoryName(fileSaveUrl);  



            if (!Directory.Exists(dir))  



                Directory.CreateDirectory(dir);  



   



            //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)  



            System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);  



   



            //原图宽高均小于模版,不作处理,直接保存  



            if (initImage.Width <= side && initImage.Height <= side)  



            {  



                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);  



            }  



            else 



            {  



                //原始图片的宽、高  



                int initWidth = initImage.Width;  



                int initHeight = initImage.Height;  



   



                //非正方型先裁剪为正方型  



                if (initWidth != initHeight)  



                {  



                    //截图对象  



                    System.Drawing.Image pickedImage = null;  



                    System.Drawing.Graphics pickedG = null;  



   



                    //宽大于高的横图  



                    if (initWidth > initHeight)  



                    {  



                        //对象实例化  



                        pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



                        //设置质量  



                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                        //定位  



                        Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);  



                        Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);  



                        //画图  



                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);  



                        //重置宽  



                        initWidth = initHeight;  



                    }  



                    //高大于宽的竖图  



                    else 



                    {  



                        //对象实例化  



                        pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



                        //设置质量  



                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                        //定位  



                        Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);  



                        Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);  



                        //画图  



                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);  



                        //重置高  



                        initHeight = initWidth;  



                    }  



   



                    //将截图对象赋给原图  



                    initImage = (System.Drawing.Image)pickedImage.Clone();  



                    //释放截图资源  



                    pickedG.Dispose();  



                    pickedImage.Dispose();  



                }  



   



                //缩略图对象  



                System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);  



                System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);  



                //设置质量  



                resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                //用指定背景色清空画布  



                resultG.Clear(Color.White);  



                //绘制缩略图  



                resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);  



   



                //关键质量控制  



                //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff  



                ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();  



                ImageCodecInfo ici = null;  



                foreach (ImageCodecInfo i in icis)  



                {  



                    if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")  



                    {  



                        ici = i;  



                    }  



                }  



                EncoderParameters ep = new EncoderParameters(1);  



                ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);  



   



                //保存缩略图  



                resultImage.Save(fileSaveUrl, ici, ep);  



   



                //释放关键质量控制所用资源  



                ep.Dispose();  



   



                //释放缩略图资源  



                resultG.Dispose();  



                resultImage.Dispose();  



   



                //释放原始图片资源  



                initImage.Dispose();  



            }  



        }  



   



        /// <summary>  



        /// 正方型裁剪  



        /// 以图片中心为轴心,截取正方型,然后等比缩放  



        /// 用于头像处理  



        /// </summary>  



        /// <remarks>吴剑 2010-11-23</remarks>  



        /// <param name="postedFile">原图HttpPostedFile对象</param>  



        /// <param name="fileSaveUrl">缩略图存放地址</param>  



        /// <param name="side">指定的边长(正方型)</param>  



        /// <param name="quality">质量(范围0-100)</param>  



        public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)  



        {  



            //创建目录  



            string dir = Path.GetDirectoryName(fileSaveUrl);  



            if (!Directory.Exists(dir))  



                Directory.CreateDirectory(dir);  



   



            //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)  



            System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);  



   



            //原图宽高均小于模版,不作处理,直接保存  



            if (initImage.Width <= side && initImage.Height <= side)  



            {  



                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);  



            }  



            else 



            {  



                //原始图片的宽、高  



                int initWidth = initImage.Width;  



                int initHeight = initImage.Height;  



   



                //非正方型先裁剪为正方型  



                if (initWidth != initHeight)  



                {  



                    //截图对象  



                    System.Drawing.Image pickedImage = null;  



                    System.Drawing.Graphics pickedG = null;  



   



                    //宽大于高的横图  



                    if (initWidth > initHeight)  



                    {  



                        //对象实例化  



                        pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



                        //设置质量  



                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                        //定位  



                        Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);  



                        Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);  



                        //画图  



                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);  



                        //重置宽  



                        initWidth = initHeight;  



                    }  



                    //高大于宽的竖图  



                    else 



                    {  



                        //对象实例化  



                        pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



                        //设置质量  



                        pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                        pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                        //定位  



                        Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);  



                        Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);  



                        //画图  



                        pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);  



                        //重置高  



                        initHeight = initWidth;  



                    }  



   



                    //将截图对象赋给原图  



                    initImage = (System.Drawing.Image)pickedImage.Clone();  



                    //释放截图资源  



                    pickedG.Dispose();  



                    pickedImage.Dispose();  



                }  



   



                //缩略图对象  



                System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);  



                System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);  



                //设置质量  



                resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                //用指定背景色清空画布  



                resultG.Clear(Color.White);  



                //绘制缩略图  



                resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);  



   



                //关键质量控制  



                //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff  



                ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();  



                ImageCodecInfo ici = null;  



                foreach (ImageCodecInfo i in icis)  



                {  



                    if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")  



                    {  



                        ici = i;  



                    }  



                }  



                EncoderParameters ep = new EncoderParameters(1);  



                ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);  



   



                //保存缩略图  



                resultImage.Save(fileSaveUrl, ici, ep);  



   



                //释放关键质量控制所用资源  



                ep.Dispose();  



   



                //释放缩略图资源  



                resultG.Dispose();  



                resultImage.Dispose();  



   



                //释放原始图片资源  



                initImage.Dispose();  



            }  



        }  



        #endregion  



   



        #region 固定模版裁剪并缩放  



        /// <summary>  



        /// 指定长宽裁剪  



        /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸  



        /// </summary>  



        /// <remarks>吴剑 2010-11-15</remarks>  



        /// <param name="postedFile">原图HttpPostedFile对象</param>  



        /// <param name="fileSaveUrl">保存路径</param>  



        /// <param name="maxWidth">最大宽(单位:px)</param>  



        /// <param name="maxHeight">最大高(单位:px)</param>  



        /// <param name="quality">质量(范围0-100)</param>  



        public static void CutForCustom(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int maxWidth, int maxHeight, int quality)  



        {  



            //从文件获取原始图片,并使用流中嵌入的颜色管理信息  



            System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);  



   



            //原图宽高均小于模版,不作处理,直接保存  



            if (initImage.Width <= maxWidth && initImage.Height <= maxHeight)  



            {  



                initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);  



            }  



            else 



            {  



                //模版的宽高比例  



                double templateRate = (double)maxWidth / maxHeight;  



                //原图片的宽高比例  



                double initRate = (double)initImage.Width / initImage.Height;  



   



                //原图与模版比例相等,直接缩放  



                if (templateRate == initRate)  



                {  



                    //按模版大小生成最终图片  



                    System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);  



                    System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);  



                    templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;  



                    templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                    templateG.Clear(Color.White);  



                    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);  



                    templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);  



                }  



                //原图与模版比例不等,裁剪后缩放  



                else 



                {  



                    //裁剪对象  



                    System.Drawing.Image pickedImage = null;  



                    System.Drawing.Graphics pickedG = null;  



   



                    //定位  



                    Rectangle fromR = new Rectangle(0, 0, 0, 0);//原图裁剪定位  



                    Rectangle toR = new Rectangle(0, 0, 0, 0);//目标定位  



   



                    //宽为标准进行裁剪  



                    if (templateRate > initRate)  



                    {  



                        //裁剪对象实例化  



                        pickedImage = new System.Drawing.Bitmap(initImage.Width, (int)Math.Floor(initImage.Width / templateRate));  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



   



                        //裁剪源定位  



                        fromR.X = 0;  



                        fromR.Y = (int)Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);  



                        fromR.Width = initImage.Width;  



                        fromR.Height = (int)Math.Floor(initImage.Width / templateRate);  



   



                        //裁剪目标定位  



                        toR.X = 0;  



                        toR.Y = 0;  



                        toR.Width = initImage.Width;  



                        toR.Height = (int)Math.Floor(initImage.Width / templateRate);  



                    }  



                    //高为标准进行裁剪  



                    else 



                    {  



                        pickedImage = new System.Drawing.Bitmap((int)Math.Floor(initImage.Height * templateRate), initImage.Height);  



                        pickedG = System.Drawing.Graphics.FromImage(pickedImage);  



   



                        fromR.X = (int)Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);  



                        fromR.Y = 0;  



                        fromR.Width = (int)Math.Floor(initImage.Height * templateRate);  



                        fromR.Height = initImage.Height;  



   



                        toR.X = 0;  



                        toR.Y = 0;  



                        toR.Width = (int)Math.Floor(initImage.Height * templateRate);  



                        toR.Height = initImage.Height;  



                    }  



   



                    //设置质量  



                    pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                    pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



   



                    //裁剪  



                    pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);  



   



                    //按模版大小生成最终图片  



                    System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);  



                    System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);  



                    templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;  



                    templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



                    templateG.Clear(Color.White);  



                    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);  



   



                    //关键质量控制  



                    //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff  



                    ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();  



                    ImageCodecInfo ici = null;  



                    foreach (ImageCodecInfo i in icis)  



                    {  



                        if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")  



                        {  



                            ici = i;  



                        }  



                    }  



                    EncoderParameters ep = new EncoderParameters(1);  



                    ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);  



   



                    //保存缩略图  



                    templateImage.Save(fileSaveUrl, ici, ep);  



                    //templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);  



   



                    //释放资源  



                    templateG.Dispose();  



                    templateImage.Dispose();  



   



                    pickedG.Dispose();  



                    pickedImage.Dispose();  



                }  



            }  



   



            //释放资源  



            initImage.Dispose();  



        }  



        #endregion  



   



        #region 等比缩放  



        /// <summary>  



        /// 图片等比缩放  



        /// </summary>  



        /// <remarks>吴剑 2011-01-21</remarks>  



        /// <param name="postedFile">原图HttpPostedFile对象</param>  



        /// <param name="savePath">缩略图存放地址</param>  



        /// <param name="targetWidth">指定的最大宽度</param>  



        /// <param name="targetHeight">指定的最大高度</param>  



        /// <param name="watermarkText">水印文字(为""表示不使用水印)</param>  



        /// <param name="watermarkImage">水印图片路径(为""表示不使用水印)</param>  



        public static void ZoomAuto(System.Web.HttpPostedFile postedFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)  



        {  



            //创建目录  



            string dir = Path.GetDirectoryName(savePath);  



            if (!Directory.Exists(dir))  



                Directory.CreateDirectory(dir);  



   



            //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)  



            System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);  



   



            //原图宽高均小于模版,不作处理,直接保存  



            if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)  



            {  



                //文字水印  



                if (watermarkText != "")  



                {  



                    using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(initImage))  



                    {  



                        System.Drawing.Font fontWater = new Font("黑体", 10);  



                        System.Drawing.Brush brushWater = new SolidBrush(Color.White);  



                        gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);  



                        gWater.Dispose();  



                    }  



                }  



   



                //透明图片水印  



                if (watermarkImage != "")  



                {  



                    if (File.Exists(watermarkImage))  



                    {  



                        //获取水印图片  



                        using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))  



                        {  



                            //水印绘制条件:原始图片宽高均大于或等于水印图片  



                            if (initImage.Width >= wrImage.Width && initImage.Height >= wrImage.Height)  



                            {  



                                Graphics gWater = Graphics.FromImage(initImage);  



   



                                //透明属性  



                                ImageAttributes imgAttributes = 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 };  



                                imgAttributes.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,  0.5f, 0.0f},//透明度:0.5  



                                   new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}  



                                };  



   



                                ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);  



                                imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  



                                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);  



   



                                gWater.Dispose();  



                            }  



                            wrImage.Dispose();  



                        }  



                    }  



                }  



   



                //保存  



                initImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);  



            }  



            else 



            {  



                //缩略图宽、高计算  



                double newWidth = initImage.Width;  



                double newHeight = initImage.Height;  



   



                //宽大于高或宽等于高(横图或正方)  



                if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)  



                {  



                    //如果宽大于模版  



                    if (initImage.Width > targetWidth)  



                    {  



                        //宽按模版,高按比例缩放  



                        newWidth = targetWidth;  



                        newHeight = initImage.Height * (targetWidth / initImage.Width);  



                    }  



                }  



                //高大于宽(竖图)  



                else 



                {  



                    //如果高大于模版  



                    if (initImage.Height > targetHeight)  



                    {  



                        //高按模版,宽按比例缩放  



                        newHeight = targetHeight;  



                        newWidth = initImage.Width * (targetHeight / initImage.Height);  



                    }  



                }  



   



                //生成新图  



                //新建一个bmp图片  



                System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);  



                //新建一个画板  



                System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);  



   



                //设置质量  



                newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;  



                newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  



   



                //置背景色  



                newG.Clear(Color.White);  



                //画图  



                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);  



   



                //文字水印  



                if (watermarkText != "")  



                {  



                    using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(newImage))  



                    {  



                        System.Drawing.Font fontWater = new Font("宋体", 10);  



                        System.Drawing.Brush brushWater = new SolidBrush(Color.White);  



                        gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);  



                        gWater.Dispose();  



                    }  



                }  



   



                //透明图片水印  



                if (watermarkImage != "")  



                {  



                    if (File.Exists(watermarkImage))  



                    {  



                        //获取水印图片  



                        using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))  



                        {  



                            //水印绘制条件:原始图片宽高均大于或等于水印图片  



                            if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height)  



                            {  



                                Graphics gWater = Graphics.FromImage(newImage);  



   



                                //透明属性  



                                ImageAttributes imgAttributes = 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 };  



                                imgAttributes.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,  0.5f, 0.0f},//透明度:0.5  



                                   new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}  



                                };  



   



                                ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);  



                                imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);  



                                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);  



                                gWater.Dispose();  



                            }  



                            wrImage.Dispose();  



                        }  



                    }  



                }  



   



                //保存缩略图  



                newImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);  



   



                //释放资源  



                newG.Dispose();  



                newImage.Dispose();  



                initImage.Dispose();  



            }  



        }  



           



        #endregion          



   



        #region 其它  



        /// <summary>  



        /// 判断文件类型是否为WEB格式图片  



        /// (注:JPG,GIF,BMP,PNG)  



        /// </summary>  



        /// <param name="contentType">HttpPostedFile.ContentType</param>  



        /// <returns></returns>  



        public static bool IsWebImage(string contentType)  



        {  



            if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png")  



            {  



                return true;  



            }  



            else 



            {  



                return false;  



            }  



        }  



   



        #endregion  



    }//end class  



} 

 

 

感谢:吴剑

该代码来自:http://www.cnblogs.com/wu-jian/archive/2011/02/21/1959382.html

你可能感兴趣的:(图片处理)