• c# 无损高质量压缩图片代码


    /// 无损压缩图片    
    /// <param name="sFile">原图片</param>    
    /// <param name="dFile">压缩后保存位置</param>    
    /// <param name="dHeight">高度</param>    
    /// <param name="dWidth"></param>    
    /// <param name="flag">压缩质量(数字越小压缩率越高) 1-100</param>    
    /// <returns></returns>    
      
    public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)  
    {  
        System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);  
        ImageFormat tFormat = iSource.RawFormat;  
        int sW = 0, sH = 0;  
      
        //按比例缩放  
        Size tem_size = new Size(iSource.Width, iSource.Height);  
      
        if (tem_size.Width > dHeight || tem_size.Width > dWidth)  
        {  
            if ((tem_size.Width * dHeight) > (tem_size.Width * dWidth))  
            {  
                sW = dWidth;  
                sH = (dWidth * tem_size.Height) / tem_size.Width;  
            }  
            else  
            {  
                sH = dHeight;  
                sW = (tem_size.Width * dHeight) / tem_size.Height;  
            }  
        }  
        else  
        {  
            sW = tem_size.Width;  
            sH = tem_size.Height;  
        }  
      
        Bitmap ob = new Bitmap(dWidth, dHeight);  
        Graphics g = Graphics.FromImage(ob);  
      
        g.Clear(Color.WhiteSmoke);  
        g.CompositingQuality = CompositingQuality.HighQuality;  
        g.SmoothingMode = SmoothingMode.HighQuality;  
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;  
      
        g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, 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(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径    
            }  
            else  
            {  
                ob.Save(dFile, tFormat);  
            }  
            return true;  
        }  
        catch  
        {  
            return false;  
        }  
        finally  
        {  
            iSource.Dispose();  
            ob.Dispose();  
        }  
    }
     
  • 相关阅读:
    Web——[HCTF 2018]WarmUp
    栈的设置+栈的越界问题+栈的极限大小
    栈的概念
    检测点3.1
    字节型数据和字型数据的小结
    汇编语言(王爽)学习记录_第一章
    sqli-labs less-1 --> less-4
    五角星
    STD二手图书交流平台团队博客-登陆问题的解决
    STD二手图书交流平台团队博客-界面构建
  • 原文地址:https://www.cnblogs.com/1439107348s/p/7677962.html
Copyright © 2020-2023  润新知