我有 280 个 pgn 文件,想要合并并转换为一个 pdf。
PNG 文件的名称顺序为 p000.png、p001.png 等,总空间约为 30mb。
我做到了:
convert p00*.png to myfile.pdf
一切顺利。幸运的是,顺序正确。
但当我这样做时:
conver p*.png to myfile.pdf
它占用了我全部 4Gb 内存和一半交换空间。然后它崩溃并出现错误
convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.
您对如何解决这个问题有任何想法吗?
我认为一个足够好的解决方案是convert
一次使用一个文件到 pdf,使用相同的名称。然后使用pdfunite
或pdftk
合并它们。但我不知道如何使用convert
这种方式。
答案1
Imagemagick 似乎对内存的使用非常敏感。建议使用 -limit 来限制 convert 将使用的内存大小,它应该使用磁盘缓存来处理所需的任何其他内容。请在此处阅读解释:
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
应该这么做。
基本上,它会遍历所有 png 文件,对它们运行转换,唯一的神奇之处在于它将basename $name .png
被文件名减去 .png 部分替换,以便在将 .pdf 扩展名附加到它时,文件名才有意义。
亲自尝试一下,你就能感受到 basename 的作用:
basename something.png .png
echo `basename something.png .png`.pdf