我想调整大量(大约 5200 个)图像文件(PPM 格式,每个大小为 5 MB)并使用convert
.
简洁版本:
convert
convert
尽管我使用了告诉连续处理图像文件的语法,但会炸毁 24 GB 的内存。
长版:
关于超过 25 GB 的图像数据,我认为我不应该同时处理所有文件。我搜索了有关如何连续处理图像文件的 ImageMagick 文档,我发现:
调整读取的每个图像的大小更快且资源消耗更少:
$ convert '*.jpg[120x120]' thumbnail%03d.png
此外,教程指出:
例如,而不是...
montage '*.tiff' -geometry 100x100+5+5 -frame 4 index.jpg
它首先读取所有 tiff 文件,然后调整它们的大小。你可以改为...
montage '*.tiff[100x100]' -geometry 100x100+5+5 -frame 4 index.jpg
这将读取每个图像并调整它们的大小,然后再继续下一个图像。当达到内存限制时,导致内存使用量大大减少,并可能防止磁盘交换(抖动)。
因此,这就是我正在做的事情:
$ convert '*.ppm[1280x1280]' pngs/%05d.png
根据文档,它应该一个一个地处理每个图像文件:读取、调整大小、写入。我在具有 12 个真实内核和 24 GB RAM 的机器上执行此操作。但是,在前两分钟内,convert
进程的内存使用率增长到大约 96%。它在那里停留了一段时间。CPU 使用率达到最大值。再长一点,这个过程就结束了,只是说:
被杀
此时,尚未生成任何输出文件。我在 Ubuntu 10.04 上convert --version
说:
Version: ImageMagick 6.5.7-8 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2009 ImageMagick Studio LLC
Features: OpenMP
看起来像是convert
在开始转换之前尝试读取所有数据。因此,要么存在错误,要么存在convert
文档问题,要么我没有正确阅读文档。
怎么了?在调整大量图像文件的大小时,如何实现低内存使用?
顺便说一句:一个快速的解决方案是使用外壳循环文件并convert
独立调用每个文件。但我想了解如何使用纯 ImageMagick 实现相同的目标。
谢谢!