【问题标题】:Reduce image size imagemagic减小图像大小 imagemagick
【发布时间】:2017-02-06 15:04:22
【问题描述】:

我尝试压缩图像但没有成功。

看看我的小实验

            var results = new Dictionary<int, int>();
            for (int i = 0; i <= 100; i++)
            {
                var stream = new MemoryStream();
                image.Quality = i;
                image.CompressionMethod = CompressionMethod.Zip;
                image.Write(stream, MagickFormat.Png);
                results[i] = stream.GetBuffer().Length;
                stream.Flush();
            }

            var best = results.OrderBy(e => e.Value).First(); 
           // the same length as for original image. quality doesn't work in this example - dictionary values are identical

谁能指出我正确的方向?

我已经在这里阅读了一些细节ImageMagick: Lossless max compression for PNG?

【问题讨论】:

    标签: c# imagemagick magick.net


    【解决方案1】:

    您似乎在使用Magick.NET。该库有一个名为 ImageOptimizer 的类,可用于无损压缩文件。可以在此处找到有关如何使用它的示例:https://github.com/dlemstra/Magick.NET/blob/main/samples/Magick.NET.Samples/LosslessCompression.cs

        var snakewareLogo = new FileInfo(SampleFiles.OutputDirectory + "OptimizeTest.jpg");
            File.Copy(SampleFiles.SnakewareJpg, snakewareLogo.FullName, true);
    
            Console.WriteLine("Bytes before: " + snakewareLogo.Length);
    
            var optimizer = new ImageOptimizer();
            optimizer.LosslessCompress(snakewareLogo);
    
            snakewareLogo.Refresh();
            Console.WriteLine("Bytes after:  " + snakewareLogo.Length);
    

    您的文件仍有可能无法缩小,因为它已经以最佳压缩方式存储。

    【讨论】:

    • 使用这个有什么缺点吗?我只是获得较小的文件大小,没有问题吗?我认为,既然它是无损的,我不会丢失任何东西 :-) 但我怀疑这怎么可能。