我有 280 个 pgn 文件要合并并转换为一个 pdf。
PNG 文件名的顺序为 p000.png、p001.png 等,总空间约为 30mb。
我做了:
convert p00*.png to myfile.pdf
Run Code Online (Sandbox Code Playgroud)
它工作正常。幸运的是,顺序正确。
但是当我这样做时:
conver p*.png to myfile.pdf
Run Code Online (Sandbox Code Playgroud)
它消耗了我所有的 4Gb 内存和一半的交换。然后它因错误而崩溃
convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我认为一个足够好的解决方案是一次使用convert一个文件来转换同名的 pdf。然后使用pdfunite或pdftk将它们合并。但我不知道如何使用convert 这种方式。
Imagemagick 似乎对内存使用非常暴力。一个建议是使用 -limit 来限制转换将使用的内存大小,它应该为它需要的任何其他东西使用磁盘缓存。在这里阅读解释:
http://www.imagemagick.org/pipermail/magick-users/2002-March/001285.html
以下是如何使用 -limit 选项:http : //www.imagemagick.org/script/command-line-options.php#limit
如果没有,您可以按照您的描述进行操作,单独转换每个图像,然后将它们与其他工具合并。就像是
for name in p*.png; do convert $name `basename $name .png`.pdf; done
Run Code Online (Sandbox Code Playgroud)
应该这样做。
基本上它遍历所有 png 文件,对它们运行转换,唯一的魔法是basename $name .png部分,它将被文件名减去 .png 部分替换,因此当附加 .pdf 扩展名时,文件名是有意义的。
亲自尝试一下,以便了解 basename 的作用:
basename something.png .png
echo `basename something.png .png`.pdf
Run Code Online (Sandbox Code Playgroud)