• C#高质量缩略图


    private static Size NewSize( int maxWidth,
    int maxHeight, int width,
    int height )  
    {
        double w = 0.0;
        double h = 0.0;
        double sw = Convert.ToDouble( width );
        double sh = Convert.ToDouble( height ); double mw = Convert.ToDouble( maxWidth );
        double mh = Convert.ToDouble( maxHeight ); if (sw < mw && sh < mh)
        {
            w = sw;
            h = sh;
        }
        else if (( sw/sh ) > ( mw/mh ))
        {
            w = maxWidth;
            h = ( w * sh )/sw;
        }
        else
        {
            h = maxHeight;
            w = ( h * sw )/sh;
        }
        return new Size( Convert.ToInt32( w ), Convert.ToInt32( h ) );
    }

    public static void SendSmallImage( string fileName,
    string newFile,
    int maxHeight,
    int maxWidth )  
    {
        System.Drawing.Image img = System.Drawing.Image.FromFile( fileName );
        System.Drawing.Imaging.ImageFormat
        thisFormat = img.RawFormat;
        Size newSize = NewSize( maxWidth, maxHeight, img.Width, img.Height );
        Bitmap outBmp = new Bitmap( newSize.Width, newSize.Height );
        Graphics g = Graphics.FromImage( outBmp );
        // 设置画布的描绘质量
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage( img, new Rectangle( 0, 0, newSize.Width, newSize.Height ),
        0, 0, img.Width, img.Height, GraphicsUnit.Pixel );
        g.Dispose( );
        // 以下代码为保存图片时,设置压缩质量
        EncoderParameters encoderParams = new EncoderParameters( );
        long[] quality = new long[1];
        quality[0] = 100;
        EncoderParameter encoderParam = new EncoderParameter( System.Drawing.Imaging.Encoder.Quality, quality );
        encoderParams.Param[0] = encoderParam;
        //获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象.
        ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders( );
        ImageCodecInfo jpegICI = null;
        for ( int x = 0;
        x < arrayICI.Length;
        x++ )
        {
            if ( arrayICI[x].FormatDescription.Equals( "JPEG" ) )
            {
                jpegICI = arrayICI[x];
                //设置JPEG编码
                break;
            }
        }
        if ( jpegICI != null )
        {
            outBmp.Save( newFile, jpegICI, encoderParams );
        }
        else
        {
            outBmp.Save( newFile,
            thisFormat );
        }
        img.Dispose( );
        outBmp.Dispose( );
    }


       本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

  • 相关阅读:
    javascript Math.random()随机数函数
    asp.net 前台获取后台c#代码信息
    关于C#网站一般处理程序(ashx)中session的问题
    怎样才能在一般处理文件中创建新的Session和访问已经存在的Session?
    使用SqlParameter向数据库中插入数据
    C#串口编程学习简单实例
    认识nodejs
    01.Javascript中的接口Interface [转载]
    动态添加脚本,并触发回调函数 初步实现按需加载
    JS正则表达式 收藏
  • 原文地址:https://www.cnblogs.com/wzg0319/p/1543050.html
Copyright © 2020-2023  润新知