C# 图片加载、导出、缩放、质量、缩略图

来源:互联网 发布:中国十大网络社交平台 编辑:程序博客网 时间:2024/04/28 10:46
using System;using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;using System.IO;namespace Framework{public class ImageClass{        public Image ResourceImage;        public int Width=0;        public int Height=0;        private int ImageWidth;        private int ImageHeight;        private ImageFormat imgFormat;        public string ErrMessage;        public ImageClass(string ImageFileName)        {            ResourceImage = Image.FromFile(ImageFileName);            Width = ResourceImage.Width;            Height = ResourceImage.Height;            imgFormat = ResourceImage.RawFormat;            ErrMessage = "";        }        public ImageClass(byte[] Img)        {            MemoryStream imgStream = new MemoryStream(Img);            try            {                ResourceImage = System.Drawing.Image.FromStream(imgStream);                Width = ResourceImage.Width;                Height = ResourceImage.Height;                imgFormat = ResourceImage.RawFormat;            }            catch (Exception ex)            {                ErrMessage = ex.ToString();            }        }        public bool ThumbnailCallback()        {            return false;        }        public Image GetReducedImage(int Width, int Height)        {            try            {                Image ReducedImage;                Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);                ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);                return ReducedImage;            }            catch (Exception e)            {                ErrMessage = e.Message;                return null;            }        }        public bool GetReducedImage(int Width, int Height, string targetFilePath)        {            try            {                EncoderParameter p;                EncoderParameters ps;                ps = new EncoderParameters(1);                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);                ps.Param[0] = p;                Image ReducedImage;                Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);                ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);                Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);                // 设置画布的描绘质量                g.CompositingQuality = CompositingQuality.HighQuality;                g.SmoothingMode = SmoothingMode.HighQuality;                g.InterpolationMode = InterpolationMode.HighQualityBicubic;                //清空画布并以透明背景色填充                g.Clear(Color.Transparent);                g.DrawImage(ResourceImage, new Rectangle(0, 0, Width, Height), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);                ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());                if (imgCodecInfo == null)                {                    ReducedImage.Save(targetFilePath, imgFormat);                }                else                {                    ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);                }                ReducedImage.Dispose();                g.Dispose();                return true;            }            catch (Exception e)            {                ErrMessage = e.Message;                return false;            }        }        public Image GetReducedImage(double Percent)        {            try            {                Image ReducedImage;                Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);                ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);                ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);                ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);                return ReducedImage;            }            catch (Exception e)            {                ErrMessage = e.Message;                return null;            }        }        public bool GetReducedImage(double Percent, string targetFilePath)        {            try            {                EncoderParameter p;                EncoderParameters ps;                ps = new EncoderParameters(1);                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);                ps.Param[0] = p;                Image ReducedImage;                Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);                ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);                ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);                ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);                Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);                // 设置画布的描绘质量                g.CompositingQuality = CompositingQuality.HighQuality;                g.SmoothingMode = SmoothingMode.HighQuality;                g.InterpolationMode = InterpolationMode.HighQualityBicubic;                //清空画布并以透明背景色填充                g.Clear(Color.Transparent);                g.DrawImage(ResourceImage, new Rectangle(0, 0, ImageWidth, ImageHeight), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);                ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());                if (imgCodecInfo == null)                {                    ReducedImage.Save(targetFilePath, imgFormat);                }                else                {                    ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);                }                ReducedImage.Dispose();                g.Dispose();                return true;            }            catch (Exception e)            {                ErrMessage = e.Message;                return false;            }        }        public bool GetReducedImage(string targetFilePath)        {            try            {                ResourceImage.Save(targetFilePath, ImageHelper.GetFormat(targetFilePath));                return true;            }            catch (Exception e)            {                ErrMessage = e.Message;                return false;            }        }        public bool CaptureImg(string targetFilePath, int width, int height, int spaceX, int spaceY)        {            try            {                //载入底图                   int x = 0;   //截取X坐标                   int y = 0;   //截取Y坐标                   //原图宽与生成图片宽   之差                       //当小于0(即原图宽小于要生成的图)时,新图宽度为较小者   即原图宽度   X坐标则为0                     //当大于0(即原图宽大于要生成的图)时,新图宽度为设置值   即width         X坐标则为   sX与spaceX之间较小者                   //Y方向同理                   int sX = ResourceImage.Width - width;                int sY = ResourceImage.Height - height;                if (sX > 0)                {                    x = sX > spaceX ? spaceX : sX;                }                else                {                    width = ResourceImage.Width;                }                if (sY > 0)                {                    y = sY > spaceY ? spaceY : sY;                }                else                {                    height = ResourceImage.Height;                }                EncoderParameter p;                EncoderParameters ps;                ps = new EncoderParameters(1);                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);                ps.Param[0] = p;                Bitmap ReducedImage = new Bitmap(width, height);                Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);                // 设置画布的描绘质量                g.CompositingQuality = CompositingQuality.HighQuality;                g.SmoothingMode = SmoothingMode.HighQuality;                g.InterpolationMode = InterpolationMode.HighQualityBicubic;                //清空画布并以透明背景色填充                g.Clear(Color.Transparent);                g.DrawImage(ResourceImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);                ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());                if (imgCodecInfo == null)                {                    ReducedImage.Save(targetFilePath, imgFormat);                }                else                {                    ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);                }                //释放资源                   //saveImage.Dispose();                ReducedImage.Dispose();                g.Dispose();            }            catch (Exception ex)            {                ErrMessage = ex.Message;                return false;            }            return true;        }        public bool MergerImg(string targetFilePath, int ImgWidth, int ImgHeight)        {            try            {                EncoderParameter p;                EncoderParameters ps;                ps = new EncoderParameters(1);                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);                ps.Param[0] = p;                //创建要显示的图片对象,根据参数的个数设置宽度                Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight);                Graphics g = Graphics.FromImage(ReducedImage);                // 设置画布的描绘质量                g.CompositingQuality = CompositingQuality.HighQuality;                g.SmoothingMode = SmoothingMode.HighQuality;                g.InterpolationMode = InterpolationMode.HighQualityBicubic;                //清空画布并以透明背景色填充                g.Clear(Color.Transparent);                int StartX = (ImgWidth - this.Width) / 2;                int StartY = (ImgHeight - this.Height) / 2;                g.DrawImage(ResourceImage, StartX, StartY, this.Width, this.Height);                //保存图象                   ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());                if (imgCodecInfo == null)                {                    ReducedImage.Save(targetFilePath, imgFormat);                }                else                {                    ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);                }                //释放资源                   ReducedImage.Dispose();                g.Dispose();            }            catch (Exception ex)            {                ErrMessage = ex.Message;                return false;            }            return true;        }        public bool MergerImg(string targetFilePath, System.Drawing.Image image, int ImgWidth, int ImgHeight)        {            try            {                EncoderParameter p;                EncoderParameters ps;                ps = new EncoderParameters(1);                p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);                ps.Param[0] = p;                //创建要显示的图片对象,根据参数的个数设置宽度                Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight);                Graphics g = Graphics.FromImage(ReducedImage);                // 设置画布的描绘质量                g.CompositingQuality = CompositingQuality.HighQuality;                g.SmoothingMode = SmoothingMode.HighQuality;                g.InterpolationMode = InterpolationMode.HighQualityBicubic;                //清空画布并以透明背景色填充                g.Clear(Color.Transparent);                int StartX = (ImgWidth - image.Width) / 2;                int StartY = (ImgHeight - image.Height) / 2;                g.DrawImage(image, StartX, StartY, image.Width, image.Height);                //保存图象                   ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());                if (imgCodecInfo == null)                {                    ReducedImage.Save(targetFilePath, imgFormat);                }                else                {                    ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps);                }                //释放资源                   ReducedImage.Dispose();                g.Dispose();            }            catch (Exception ex)            {                ErrMessage = ex.Message;                return false;            }            return true;        }        //返回图片解码器信息用于jpg图片        private ImageCodecInfo GetCodecInfo(string str)        {            string ext = str.Substring(str.LastIndexOf(".") + 1);            string mimeType = "";            switch (ext.ToLower())            {                case "jpe":                case "jpg":                case "jpeg":                    mimeType = "image/jpeg";                    break;                case "bmp":                    mimeType = "image/bmp";                    break;                case "png":                    mimeType = "image/png";                    break;                case "tif":                case "tiff":                    mimeType = "image/tiff";                    break;                default:                    mimeType = "image/jpeg";                    break;            }            ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();            foreach (ImageCodecInfo ici in CodecInfo)            {                if (ici.MimeType == mimeType) return ici;            }            return null;        }        public void Dispose()        {            ResourceImage.Dispose();        }}}