LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 大图片压缩算法,减少图片体积

admin
2021年3月18日 11:7 本文热度 2284

声明:
图片压缩算法,不建议对小图片进行压缩,一般文件小于1m的,真心没必要压缩,
图片很小的,例如:几百KB的图片,有可能不会减少图片体积,反而压缩后更大,也很正常,
请大家合理使用,并不是,所有图片,越压缩越好!!!!!
上面是我对2M多的图片进行了测试,压缩质量设置了50,压缩到了800KB,放大和缩小和原图,几乎没有什么区别。

代码如下:

private void button3_Click(object sender, EventArgs e)

        {

            using (OpenFileDialog ofd = new OpenFileDialog())

            {

                ofd.Filter = "图片|*.jpg;*.png;*.gif;*.jpeg;*.bmp";

                if (ofd.ShowDialog() == DialogResult.OK)

                {

                    using (FileStream file = new FileStream(ofd.FileName, FileMode.Open))

                    {

                        var img = CompressionImage(file, 50L);

                        MessageBox.Show(CreateImageFromBytes(AppDomain.CurrentDomain.BaseDirectory + @"\" + Guid.NewGuid().ToString(), img));

                    }

                }

            }

        }

        ///

        public static Image BytesToImage(byte[] buffer)

        {

            MemoryStream ms = new MemoryStream(buffer);

            Image image = System.Drawing.Image.FromStream(ms);

            return image;

        }

        ///

        public static string CreateImageFromBytes(string fileName, byte[] buffer)

        {

            string file = fileName;

            Image image = BytesToImage(buffer);

            ImageFormat format = image.RawFormat;

            if (format.Equals(ImageFormat.Jpeg))

            {

                file += ".jpeg";

            }

            else if (format.Equals(ImageFormat.Png))

            {

                file += ".png";

            }

            else if (format.Equals(ImageFormat.Bmp))

            {

                file += ".bmp";

            }

            else if (format.Equals(ImageFormat.Gif))

            {

                file += ".gif";

            }

            else if (format.Equals(ImageFormat.Icon))

            {

                file += ".icon";

            }

            System.IO.FileInfo info = new System.IO.FileInfo(file);

            System.IO.Directory.CreateDirectory(info.Directory.FullName);

            File.WriteAllBytes(file, buffer);

            return file;

        }

        /// ///

        /// 圖片流

        /// 壓縮質量0-100之間 數值越大質量越高

        ///

        private byte[] CompressionImage(Stream fileStream, long quality)

        {

            using (System.Drawing.Image img = System.Drawing.Image.FromStream(fileStream))

            {

                using (Bitmap bitmap = new Bitmap(img))

                {

                    ImageCodecInfo CodecInfo =  GetEncoder(img.RawFormat);

                    System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;

                    EncoderParameters myEncoderParameters = new EncoderParameters(1);

                    EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);

                    myEncoderParameters.Param[0] = myEncoderParameter;

                    using (MemoryStream ms = new MemoryStream())

                    {

                        bitmap.Save(ms, CodecInfo, myEncoderParameters);

                        myEncoderParameters.Dispose();

                        myEncoderParameter.Dispose();

                        return ms.ToArray();

                    }

                }

            }

        }

        private static ImageCodecInfo GetEncoder(ImageFormat format)

        {

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

            foreach (ImageCodecInfo codec in codecs)

            {

                if (codec.FormatID == format.Guid)

                { return codec; }

            }

            return null;

        }


该文章在 2021/3/18 11:09:27 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved