我想调整大约5200个图像文件(PPM格式,每个文件大小为5 MB),并使用convert
将它们保存为PNG格式。
简短版本:
convert
会占用24 GB的内存,尽管我使用了指示convert
按顺序处理图像文件的语法。
详细版本:
针对超过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个真实核心和24GB内存的机器上进行操作。然而,在前两分钟内,
convert
进程的内存使用量增长到约96%。它会在那里停留一段时间,CPU使用率达到最大值。再过一段时间,该进程就会死亡,并显示以下信息:此时,还未生成任何输出文件。我正在使用Ubuntu 10.04,Killed
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
存在问题,要么是文档存在问题,或者我没有正确阅读文档。有什么问题?如何在调整此大量图像文件大小时实现低内存使用?
顺便说一句:一个快速的解决方案就是使用shell循环遍历文件,并单独为每个文件调用
convert
。但我想了解如何使用纯ImageMagick实现相同的效果。谢谢!
find . -name "*.ppm" -exec convert '{}[1280x1280]' pngs/%05d.png \;
这能行吗?find -exec
将会列出所有的文件,并对每个文件执行给定的命令。 - Flinth%05d
总是为零)。 - Dr. Jan-Philip Gehrcke