C#实现JPG图片的缩放(基于GDI+)

C#实现JPG图片的缩放

目前项目中有对jpg图片进行压缩展示的需求,并且要求压缩后的图片质量较高。一般来说目前常用的压缩图片用的是TinyPNG。但是首先它收费,其次好像对于.NET只支持.NET FrameWork 4.6.1及之后的版本,我们项目目前使用的还是4.5的版本,因此自己查了点资料写了个用C#实现的压缩工具。其中实现压缩的函数是CompressImage(),可以实现规定高度宽度,指定图片保存质量的缩放。主要用的是GDI+实现的,详情的参考请看微软文档

/// <summary>
        /// 压缩图片
        /// </summary>
        /// <param name="originalFileFullName">原图片地址</param>
        /// <param name="afterConversionFileFullName">压缩后保存图片地址</param>
        /// <param name="flag">压缩质量(数字越高图片质量约高,也更大)1-100</param>
        /// <param name="sW">压缩后宽度</param>
        /// <param name="sH">压缩后高度</param>
        /// <returns></returns>
        public static bool CompressImage(string originalFileFullName, string afterConversionFileFullName, int flag, int sW, int sH)
        { 
            Image iSource = Image.FromFile(originalFileFullName);
            ImageFormat tFormat = iSource.RawFormat;

            Bitmap ob = new Bitmap(sW, sH);
            Graphics g = Graphics.FromImage(ob);

            g.Clear(Color.WhiteSmoke);
            //高质量低速度
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            //指定抗锯齿
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //指定高质量的双线性插值法。 执行预筛选以确保高质量的收缩
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

            g.DrawImage(iSource, new Rectangle(0, 0, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);

            g.Dispose();

            //以下代码为保存图片时,设置压缩质量
            EncoderParameters ep = new EncoderParameters();
            long[] qy = new long[1];
            qy[0] = flag;//设置压缩的比例1-100
            EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
            ep.Param[0] = eParam;

            try
            { 
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo jpegICIinfo = null;
                for (int x = 0; x < arrayICI.Length; x++)
                { 
                    if (arrayICI[x].FormatDescription.Equals("JPEG"))
                    { 
                        jpegICIinfo = arrayICI[x];
                        break;
                    }
                }
                if (jpegICIinfo != null)
                { 
                    ob.Save(afterConversionFileFullName, jpegICIinfo, ep);
                    FileInfo fi = new FileInfo(afterConversionFileFullName);

                }
                else
                { 
                    ob.Save(afterConversionFileFullName, tFormat);
                }
                return true;
            }
            catch
            { 
                return false;
            }
            finally
            { 
                iSource.Dispose();
                ob.Dispose();
            }
        }

目前写了个简单的winform进行使用。
下载链接
《C#实现JPG图片的缩放(基于GDI+)》

    原文作者:数码豆豆
    原文地址: https://blog.csdn.net/qq_40978942/article/details/111149512
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞