• C#实现图片的无损压缩


            /// <summary>

            /// 图像缩略图处理

            /// </summary>

            /// <param name="bytes">图像源数据</param>

            /// <param name="compression">压缩质量 1-100</param>

            /// <param name="thumbWidth">缩略图的宽</param>

            /// <param name="thumbHeight">缩略图的高</param>

            /// <returns></returns>

            public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0)

            {

                byte[] bs = null;


                try

                {

                    if (bytes != null)

                    {

                        using (MemoryStream ms = new MemoryStream(bytes))

                        {

                            using (Bitmap srcimg = new Bitmap(ms))

                            {

                                if (thumbWidth == 0 && thumbHeight == 0)

                                {

                                    thumbWidth = srcimg.Width;

                                    thumbHeight = srcimg.Height;

                                }

                                using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量

                                {

                                    //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。

                                    using (Graphics gr = Graphics.FromImage(dstimg))

                                    {

                                        //把原始图像绘制成上面所设置宽高的缩小图

                                        Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight);

                                        gr.Clear(Color.WhiteSmoke);

                                        gr.CompositingQuality = CompositingQuality.HighQuality;

                                        gr.SmoothingMode = SmoothingMode.HighQuality;

                                        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;

                                        gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel);


                                        EncoderParameters ep = new EncoderParameters(1);

                                        ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100

                                        ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

                                        ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid);

                                        using (MemoryStream dstms = new MemoryStream())

                                        {

                                            if (jpegICIinfo != null)

                                            {

                                                dstimg.Save(dstms, jpegICIinfo, ep);

                                            }

                                            else

                                            {

                                                dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里

                                            }

                                            bs = new Byte[dstms.Length];

                                            dstms.Position = 0;

                                            dstms.Read(bs, 0, bs.Length);

                                        }

                                    }

                                }

                            }

                        }

                    }

                }

                catch (Exception ex)

                {

                    LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight));

                }

                return bs;

            }


  • 相关阅读:
    ASC1 C New Year Bonus Grant
    CodeForces 180C Letter
    Codeforces 71C Round Table Knights
    GCPC2014 J Not a subsequence
    treeview自动从表中添加标题和列值做目录的方法2
    delphi学习treeview中从表列名和数据添加为目录并双击自动选中
    对一个表中所有列数据模糊查询adoquery
    单击dbgrid列标题排序 升降序
    从右键菜单里粘贴复制的工资到数据库里
    如何从右键弹出菜单中清空删除数据加清空前提问确定
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12352540.html
Copyright © 2020-2023  润新知