减少非常大的图像的文件大小,而不改变图像尺寸

时间:2010-02-13 11:34:44

标签: image image-processing compression image-manipulation imagemagick

考虑处理上传可能非常大的PNG文件的应用程序。

所有上传的文件必须存储到磁盘以供日后检索。但是,PNG文件的大小最多可达30 MB,但磁盘存储限制会使每个文件的最大大小为1 MB。

问题是采用文件大小最大为30 MB的输入PNG并生成文件大小低于1 MB的输出PNG。

此操作显然会有损耗 - 图像质量,颜色等的降低不是问题。但是,有一点不能改变的是图像尺寸。因此,尺寸为800x600的输入文件必须生成尺寸为800x600的输出文件。

上述要求严格且无法更改。

使用ImageMagick(或其他一些开源工具)如何在不改变图像尺寸的情况下,将大小约为30 MB的输入PNG文件的文件大小减小到每个文件最大1 MB? / b>

12 个答案:

答案 0 :(得分:43)

PNG不是一种有损的图像格式,因此您可能需要将图像转换为另一种格式 - 很可能是JPEG格式。 JPEG具有可设置的“质量”因素 - 您可以简单地继续降低品质因数,直到您获得足够小的图像。所有这些都可以在不改变图像分辨率的情况下完成。

显然,视图像而言,视觉质量的损失可能很大。 JPEG最适合“真实生活”图像,例如来自相机的图片。对于徽标,屏幕截图或其他从“明亮”到“黑暗”的“锐利”过渡的图像,它的效果不佳。 (另一方面,PNG具有相反的行为 - 它最适用于徽标等)。

但是,在800x600下,将JPEG降至1MB以下可能非常容易。 (我会非常惊讶地看到这些小尺寸的30MB文件。)事实上,即使未压缩,图像也只有1.4MB左右:

800 pixels * 600 pixels * 3 Bytes / color = 1,440,000 Bytes = 1.4MB

因此,您只需要1.4:1的压缩比即可将图像降至1MB。根据图像的类型,PNG压缩可以很好地提供该级别的压缩。如果没有,JPEG几乎可以肯定 - 大约10:1的JPEG压缩率并不罕见。同样,输出的质量/大小将取决于图像的类型。

最后,虽然我在一段时间内没有使用过ImageMagick,但我几乎可以肯定有一些选项可以使用特定的品质因子重新压缩图像。仔细阅读文档,然后开始试验!

编辑:使用ImageMagick看起来确实应该很容易。来自docs

$magick> convert input.png -quality 75 output.jpg

继续玩质量值,直到获得合适的输出。

答案 1 :(得分:7)

您的示例很麻烦,因为分辨率为800x600的30MB图像存储每像素500位。显然非常不切实际。请给我们实数。

与此同时,我尝试的“便宜又开朗”的方法如下:将图像缩小6倍,然后将其缩小6倍,然后通过PNG压缩运行。如果你运气好的话,你可以将图像尺寸缩小36倍。如果运气不好,节省的费用将更像是6。

pngtopng big.png | pnmscale -reduce 6 | pnmscale 6 | pnmtopng > big.png

如果这还不够,你可以在中间(在小图像上)投掷ppmquant以减少颜色数量。 (示例是netpbm / pbmplus,我总是比ImageMagick更容易理解。)

要知道这样的解决方案是否合理,我们必须知道问题的真实数量。

此外,如果您真的要永久丢弃这些信息,那么使用JPEG压缩几乎肯定会更好,因为JPEG压缩旨在合理地优雅地丢失信息。是否有某些原因JPEG不适合您的应用程序?

答案 2 :(得分:3)

由于图像文件的大小与图像尺寸和颜色数量直接相关,因此您似乎只有一个选择:减少颜色数量。

大约30MB到1MB是非常大幅减少。

通过转换为单色来实现这一比例很难。

答案 3 :(得分:3)

这在很大程度上取决于你最终想要的东西,我经常喜欢在坚持尺寸的同时减少颜色数量。在许多情况下,减少的颜色无关紧要。以下是将颜色减少到254的示例。

convert -colors 254 in.png out.png

答案 4 :(得分:2)

您可以尝试使用pngquant实用程序。它的安装和使用非常简单。它可以压缩你的PNG很多而没有明显的质量损失。

安装后请尝试以下方法:

pngquant yourfile.png
pngquant --quality=0-70 yourfile.png

对于我的演示图像(由imagemagick生成),第一个命令将350KB减少到110KB,第二个命令将其减少到65KB。

答案 5 :(得分:1)

  • 步骤1:将图像减小到原始尺寸的1/16。
  • 第2步:减少颜色数量。
  • 步骤3:将图像尺寸增大回原始尺寸。

答案 6 :(得分:0)

我知道你想保留像素大小,但是你可以减小像素大小并调整与图像一起存储的DPI,以便保留显示尺寸吗?这取决于您将使用什么客户端来查看图像,但大多数客户应该观察它。如果您使用网络上的图片,则只需设置<img>标记的像素大小。

答案 7 :(得分:0)

这取决于它们的图像类型,它是真实生活图片还是计算机生成的图像, 对于现实生活中的图像,png会做得很少,甚至可能根本不会压缩,对这些图像使用jpg,图像的数量有限的不同颜色(它可以有24位图像深度但是唯一图像的数量将是低)png可以很好地压缩。 png基本上是一个zip图像的实现,所以如果很多像素是相同的,你可以有一个相当不错的压缩率,如果你需要无损压缩,不要调整大小。

答案 8 :(得分:0)

使用session.save_path减少尺寸而不会丢失

http://optipng.sourceforge.net/

答案 9 :(得分:0)

如果你想在ubuntu中修改图像大小,你可以尝试&#34; gimp&#34;。 我在ubuntu中尝试了几个图像编辑应用程序,这似乎是其中最好的。

如何安装?

- 打开终端

-type:sudo apt-get install gimp-plugin-registry

- 给予管理员密码。你需要网络连接。

- 安装完毕后,使用GIMP图像编辑器打开图像。然后转到:文件&gt;导出为&gt;点击&#39;导出&#39;按钮

- 您将看到一个小窗口,其中的复选框位于&#34;在图像窗口中显示预览&#34;。选中此选项后,您将看到文件的当前大小以及质量级别。

- 调整质量等级以增加/减少文件大小。

- 一旦完成调整,点击“导出”即可。按钮最后保存文件。

答案 10 :(得分:0)

尝试ImageOptim https://imageoptim.com/mac它是免费且开源的

答案 11 :(得分:-7)

右键单击图像。选择用油漆打开。点击调整大小。单击像素并将水平更改为250或200。

这是唯一的事情。对于使用Windows XP或Windows 7的用户来说,这是最快捷的方式。