有容乃大:Linux下轻松解决图片转PDF内存不足转换失败问题
薄荷站长最近是跟“图片转PDF”这个问题杠上了。前文《图像魔术:ImageMagick轻松转换PDF和图片》介绍了最简单的Linux下将多张图片合并为一个 PDF 文档的方法,即利用 ImageMagick 自带的 convert 命令进行转换、合并。
但是在使用过程中,薄荷站长发现:如果同时处理的图片太多,会导致生成的 PDF 内容不完整。换就话说,就是 convert 命令一次能够处理的图片数量有限。
出错的提示为:
convert-im6.q16: DistributedPixelCache '127.0.0.1' @ error/distribute-cache.c/ConnectPixelCacheServer/244.
convert-im6.q16: cache resources exhausted `00004057A.jpg' @ error/cache.c/OpenPixelCache/3984.
虽然可以使用 convert 命令分批次转换成多个 PDF 文档,然后使用 pdfunite 将多个 PDF 文档合并,参阅前文《随心裁剪:PDFShuffler轻松搞定PDF合并插页编辑》。但是如果仍旧能用 convert 命令一次性搞定才是最好的。
经过分析发现,出现此类错误提示,基本上是 ImageMagick 的配置文件默认对其分配的内存或磁盘空间太小所致。那么,我们只要在 ImageMagick 的配置文件中将内存和磁盘多分配一些就可以了。当然,前提是妳的电脑内存比较充足。
使用文本编辑器打开 ImageMagick 的配置文件 policy.xml:
sudo xed /etc/ImageMagick-6/policy.xml
找到以下这两行,就是我们需要修改的目标:
<policy domain="resource" name="memory" value="256MB"/>
<policy domain="resource" name="disk" value="1GiB"/>
memory 那一行表示内存分配,默认只有 256MB,显然是不够的。
disk 那一行表示磁盘分配,默认是 1GB,一般情况下足够了。
那么,我们只要把内存分配修改为 1GiB 或者更大就可以了。薄荷站长修改成 4GiB。
保存退出,再次使用 convert 命令一键批量转换图片为一个 PDF 文档,就再也不会出错了!
小结:ImageMagick 工具非常强大,虽然是命令方式,但是简单易用,这是一个值得好好探索的宝库。