2017-08-01 72 views
0

如何缩放/优化/最小化输出图像,使其低于某个最大文件大小? (输入源是不同的 - PDF,JPEG,GIF,TIFF ...)ImageMagick:具有最大文件大小的缩放PNG图像

我已经看了很多地方,但无法找到这个问题的答案。

在ImageMagick的一个JPEG输出可以与extent做到这一点(见例如ImageMagick: scale JPEG image with a maximum file-size),但似乎没有成为其他的文件格式例如等效PNG。

我可以在一个循环中使用魔杖或PIL(首选python),直到文件大小低于某个值,但对于1000个图像,这将有一个大的I/O开销,除非有一种方法来预测/文件大小没有先写出来。也许这是唯一的选择。

我也可以换不同的(MacOS的)命令行工具的蟒蛇。

此外,我只希望做任何压缩在所有的地方是绝对必要的(源主要是文本),剩下的压缩算法的选择。

感谢您的帮助。

PS其他相关的问题:

Scale image according a maximum file size

Compress a PNG image with ImageMagick

python set maximum file size when converting (pdf) to jpeg using e.g. Wand

编辑:https://stackoverflow.com/a/40588202/1021819是相当接近过 - 虽然确切的代码也已经(不可避免的?),使一些关于如何减小文件大小的选择(resize) )。没有多维搜索,也许没有通用的方法来做到这一点。

此外,由于输入文件是PDF文件,可以在此甚至可以用PIL做了什么?第一选择是关于光栅化,我一直在使用Wand。

https://stackoverflow.com/a/34618887/1021819也非常有用,因为它使用法杖,所以把二进制印章环内的操作似乎是前进的道路。

+0

的可能的复制[Python的PIL:查找图像的大小,而无需编写它作为一个文件(https://stackoverflow.com/questions/40587343/python-pil-find-the-size-of-image-without将其作为文件) –

+0

通过执行[二进制搜索](https://en.wikipedia.org/wiki/Binary_search_algorithm),可以相当快地放大正确的大小。您不需要将文件保存到磁盘,将其保存到'io.BytesIO()'。请注意,由PIL生成的PNG文件通常可以通过使用像[optipng](http://optipng.sourceforge.net)这样的PNG优化程序大大减少。 –

+0

谢谢两个 - 超级有用 - 如果可能的话,我确实想从python驱动所有东西(而不是从它调用可执行文件) – jtlz2

回答

0

对于PNG,压缩方法和视觉外观没有权衡,因为PNG是无损的。只需要尽可能小的文件,使用我的“pngcrush”应用程序,“optipng”,“zopflipng”或其他类似的文件,即 。

如果您需要的文件比任何一个文件都小,那么尝试将颜色数减少到255或更少,这将允许PNG编解码器生成一个索引颜色的PNG(颜色类型3) RGB PNG文件大小的1/3。您可以使用ImageMagick的“-colors 255”选项来执行此操作。不过,我建议使用“pngquant”应用程序;它比IM在大多数情况下做得更好。