none
C#如何压缩PNG图片? RRS feed

  • 问题

  • Adobe Photoshop, GIMP, Paint.NET都能设置PNG图片的压缩等级。一般是从0~9.

    C#里的PictureBox加载一张图片后,如何压缩这图片?


    I am using Windows Server 2003, CentOS Linux 5.2, Windows XP, VirtualBox 3.0.4, Visual Studio 2005, Eclipse 3.5, NOtepad++ 5.4.5, Microsoft.NET Framework 2.0 SP2, C# 2.0, IIS 6.0, Apache 1.3.41, Nginx-0.7.61, SQL Server 2000, MySQL 5.0, FireBird 2.1.2, PHP 5.2.10, OpenOffice 3.1 and EIOffice2009 SP1.
    2009年8月25日 9:50

答案

  • 你好,请参考 http://www.cnntec.com/showtopic-229.html
    jon.valett@gmail.com
    • 已标记为答案 dvdvip 2009年8月29日 11:40
    2009年8月26日 16:16
    版主
  • 你好!
         这样压缩:
            static void Main(string[] args)
            {


                Bitmap myBitmap = new Bitmap(@"D:\xxx.png");
                ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/png");

                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                EncoderParameter myEncoderParameter = new EncoderParameter(Encoder.Quality, 25L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                myBitmap.Save(@"D:\压缩xxx.png", myImageCodecInfo, myEncoderParameters);


            }
            private static ImageCodecInfo GetEncoderInfo(String mimeType)
            {
                int j;
                ImageCodecInfo[] encoders;
                encoders = ImageCodecInfo.GetImageEncoders();
                for (j = 0; j < encoders.Length; ++j)
                {
                    if (encoders[j].MimeType == mimeType)
                        return encoders[j];
                }
                return null;
            }


    周雪峰
    • 已标记为答案 dvdvip 2009年8月29日 11:40
    2009年8月26日 7:28
    版主

全部回复

  • 你好!
         这样压缩:
            static void Main(string[] args)
            {


                Bitmap myBitmap = new Bitmap(@"D:\xxx.png");
                ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/png");

                EncoderParameters myEncoderParameters = new EncoderParameters(1);
                EncoderParameter myEncoderParameter = new EncoderParameter(Encoder.Quality, 25L);
                myEncoderParameters.Param[0] = myEncoderParameter;
                myBitmap.Save(@"D:\压缩xxx.png", myImageCodecInfo, myEncoderParameters);


            }
            private static ImageCodecInfo GetEncoderInfo(String mimeType)
            {
                int j;
                ImageCodecInfo[] encoders;
                encoders = ImageCodecInfo.GetImageEncoders();
                for (j = 0; j < encoders.Length; ++j)
                {
                    if (encoders[j].MimeType == mimeType)
                        return encoders[j];
                }
                return null;
            }


    周雪峰
    • 已标记为答案 dvdvip 2009年8月29日 11:40
    2009年8月26日 7:28
    版主
  • 支持 这个方法好
    2009年8月26日 15:08
  • 你好,请参考 http://www.cnntec.com/showtopic-229.html
    jon.valett@gmail.com
    • 已标记为答案 dvdvip 2009年8月29日 11:40
    2009年8月26日 16:16
    版主
  • 根本不行!Jpeg的倒是可以,想必你也是用jpeg的改了标示发上来的,测试都没测试过!

    2009年12月7日 3:51
  • GDI+不支持。找个专业的图像处理库吧,GDI+只是个设计来做图像显示的而已。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年12月7日 4:47
    版主