zoukankan      html  css  js  c++  java
  • 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;

            }


  • 相关阅读:
    手把手教你利用create-nuxt-app脚手架创建NuxtJS应用
    初识NuxtJS
    webpack打包Vue应用程序流程
    用选择器代替表格列的筛选功能
    Element-UI
    Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[贪婪算法选特征]
    Sparse Principal Component Analysis via Rotation and Truncation
    Generalized Power Method for Sparse Principal Component Analysis
    Sparse Principal Component Analysis via Regularized Low Rank Matrix Approximation(Adjusted Variance)
    Truncated Power Method for Sparse Eigenvalue Problems
  • 原文地址:https://www.cnblogs.com/hgmyz/p/12352538.html
Copyright © 2011-2022 走看看