Jan*_*cke 8 linux image imagemagick image-processing imagemagick-convert
我想调整大量(约5200)图像文件(PPM格式,每个5 MB大小)的大小,并使用它们保存为PNG格式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,文档存在问题,要么我没有正确阅读文档.
怎么了?如何在调整大量图像文件的同时实现低内存使用量?
BTW:一个快速的解决方案是使用shell循环遍历文件并convert独立调用每个文件.但我想了解如何使用纯ImageMagick实现相同目标.
谢谢!
没有直接访问您的系统,很难帮助您调试它.
但你可以做三件事来帮助自己缩小这个问题:
添加-monitor为第一个命令行参数,以查看有关正在进行的操作的更多详细信息.
(可选)添加 -debug all -log "domain: %d  +++ event: %e  +++ function: %f  +++ line: %l  +++ module: %m  +++ processID: %p  +++ realCPUtime: %r  +++ wallclocktime: %t  +++ userCPUtime: %u \n\r"
暂时不要使用'*.ppm [1280x1280]'作为参数,而是使用'a*.ppm [1280x1280]'代替.目的是将通配符扩展(或其他一些合适的方法实现相同)限制为仅几个匹配,而不是所有可能的匹配.
如果你做'2' 你需要做'3' 否则你将被大量的输出所淹没.(此外,您的系统似乎无法处理完整的通配符而无需终止进程......)
如果你找不到解决方案,那么......
| 归档时间: | 
 | 
| 查看次数: | 4353 次 | 
| 最近记录: |