web-dev-qa-db-ja.com

複数のPNGを1つのPDFに変換する

280個のpgnファイルがあり、それらをマージして1つの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を一度に1ファイルずつpdfに使用することだと思います。次に、pdfuniteまたはpdftkを使用してそれらをマージします。しかし、convertをこのように使用する方法がわかりません。

5
Presbitero

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部分を除いたものに置き換えられます。ファイル名は理にかなっています。

自分で試してみて、basenameが何をするのか感じてください。

basename something.png .png
echo `basename something.png .png`.pdf
8
roadmr