C#实现图片压缩

来源:互联网 发布:淘宝windows 编辑:程序博客网 时间:2024/05/21 10:42
using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;using System.Drawing;using System.Drawing.Imaging;namespace CScreen{    public class PhotoReduce    {        public Bitmap ystp(int int_Width, int int_Height, Image image) //压缩图片        {            System.Drawing.Image oldimage = new System.Drawing.Bitmap(image);            float New_Width; // 新的宽度                float New_Height; // 新的高度                float Old_Width, Old_Height; //原始高宽                int flat = 0;//标记图片是不是等比                int xPoint = 0;//若果要补白边的话,原图像所在的x,y坐标。                int yPoint = 0;            //判断图片                Old_Width = (float)oldimage.Width;            Old_Height = (float)oldimage.Height;            if ((Old_Width / Old_Height) > ((float)int_Width / (float)int_Height)) //当图片太宽的时候                {                New_Height = Old_Height * ((float)int_Width / (float)Old_Width);                New_Width = (float)int_Width;                //此时x坐标不用修改                    yPoint = (int)(((float)int_Height - New_Height) / 2);                flat = 1;            }            else if ((oldimage.Width / oldimage.Height) == ((float)int_Width / (float)int_Height))            {                New_Width = int_Width;                New_Height = int_Height;            }            else            {                New_Width = (int)oldimage.Width * ((float)int_Height / (float)oldimage.Height);//太高的时候                   New_Height = int_Height;                //此时y坐标不用修改                    xPoint = (int)(((float)int_Width - New_Width) / 2);                flat = 1;            }            // ===缩小图片===                System.Drawing.Image thumbnailImage = oldimage.GetThumbnailImage((int)New_Width, (int)New_Height, new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);            Bitmap bm = new Bitmap(thumbnailImage);            if (flat != 0)            {                Bitmap bmOutput = new Bitmap(int_Width, int_Height);                Graphics gc = Graphics.FromImage(bmOutput);                SolidBrush tbBg = new SolidBrush(Color.White);                gc.FillRectangle(tbBg, 0, 0, int_Width, int_Height); //填充为白色                    gc.DrawImage(bm, xPoint, yPoint, (int)New_Width, (int)New_Height);                Bitmap bmp = new Bitmap(bmOutput);                //ImageCoderInfo                  ImageCodecInfo ici = null;                //Encoder                Encoder ecd = null;                //EncoderParameter                EncoderParameter ept = null;                //EncoderParameters                EncoderParameters eptS = null;                try                {                    //bmp = new Bitmap(filePath);                    ici = this.getImageCoderInfo("image/jpeg");                    ecd = Encoder.Quality;                    eptS = new EncoderParameters(1);                    ept = new EncoderParameter(ecd, 10L);                    eptS.Param[0] = ept;                    //bmp.Save(filePath_ystp, ici, eptS);                }                catch (Exception ex)                {                    throw new Exception(ex.Message);                }                finally                {                    bmp.Dispose();                    ept.Dispose();                    eptS.Dispose();                }            }            else            {                //ImageCoderInfo                  ImageCodecInfo ici = null;                //Encoder                Encoder ecd = null;                //EncoderParameter                EncoderParameter ept = null;                //EncoderParameters                EncoderParameters eptS = null;                try                {                    //bmp = new Bitmap(filePath);                    ici = this.getImageCoderInfo("image/jpeg");                    ecd = Encoder.Quality;                    eptS = new EncoderParameters(1);                    ept = new EncoderParameter(ecd, 10L);                    eptS.Param[0] = ept;                   // bm.Save(filePath_ystp, ici, eptS);                }                catch (Exception ex)                {                    throw new Exception(ex.Message);                }                finally                {                    bm.Dispose();                    ept.Dispose();                    eptS.Dispose();                }            }            return bm;        }        private bool ThumbnailCallback()        {            return false;        }        private ImageCodecInfo getImageCoderInfo(string coderType)// 获取图片编码类型信息        {            ImageCodecInfo[] iciS = ImageCodecInfo.GetImageEncoders();            ImageCodecInfo retIci = null;            foreach (ImageCodecInfo ici in iciS)            {                if (ici.MimeType.Equals(coderType))                    retIci = ici;            }            return retIci;        }    }}

原创粉丝点击