zoukankan      html  css  js  c++  java
  • 图片压缩技术

     private string ImgComPress(string fromBase64)
            {
                Bitmap bitMap = new Bitmap(new MemoryStream(Convert.FromBase64String(fromBase64)));
                //Bitmap bitMap = new Bitmap(Server.MapPath("./1.jpg"));
                ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
                System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 80L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                Bitmap newbitMap = null;
                if (bitMap.Height > 1080)
                {
                    float newWidth = ((float)bitMap.Width / bitMap.Height) * 1080;
                    newbitMap = new Bitmap(bitMap, (int)newWidth, 1080);//从指定的现有图像并使用指定的大小初始化 Bitmap 类的新实例。
                }
                using (MemoryStream ms = new MemoryStream())
                {
                    if (newbitMap != null)
                    {
                        newbitMap.Save(ms, jgpEncoder, myEncoderParameters);
                    }
                    else
                    {
                        bitMap.Save(ms, jgpEncoder, myEncoderParameters);
                        bitMap.Save(Server.MapPath("./2.jpg"));
                        bitMap.Save(Server.MapPath("./2_1.jpg"), jgpEncoder, myEncoderParameters);
                    }
                    if (ms.Length >= 1)
                    {
                        return Convert.ToBase64String(ms.GetBuffer());
                    }
                }
                return fromBase64;
            }

            private ImageCodecInfo GetEncoder(ImageFormat format)
            {
                ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
                foreach (ImageCodecInfo codec in codecs)
                {
                    if (codec.FormatID == format.Guid)
                    {
                        return codec;
                    }
                }
                return null;
            }

  • 相关阅读:
    ✨Synchronized底层实现---偏向锁
    🌞LCP 13. 寻宝
    ✨Synchronized底层实现---概述
    ⛅104. 二叉树的最大深度
    c++多线程之顺序调用类成员函数
    C++ STL实现总结
    C#小知识
    C#中HashTable和Dictionary的区别
    WPF的静态资源(StaticResource)和动态资源(DynamicResource)
    WPF之再谈MVVM
  • 原文地址:https://www.cnblogs.com/tx720/p/5607114.html
Copyright © 2011-2022 走看看