zoukankan      html  css  js  c++  java
  • 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();  
        }  
    }
     
  • 相关阅读:
    201119西瓜书系列博客---5、神经网络
    GO结果画图
    Java调用R语言脚本
    CentOS 6,7 查看、修改时间时区
    eval 让shell脚本动态的构建命令
    shell脚本中awk命令内置参数与脚本参数冲突的解决方法
    Shell 传递参数
    clusterProfiler::enrichGO() is getting very slow
    R install("curl") on CentOS 7.6
    centos 7 安装 myclipse 2017 ci
  • 原文地址:https://www.cnblogs.com/1439107348s/p/7677962.html
Copyright © 2011-2022 走看看