1. ホーム
  2. image

[解決済み] PDFからPNGへの変換

2023-05-30 11:29:09

質問

PDFをPNG画像に変換しようとしています(少なくとも1つの表紙)。私はpdftkでPDFの最初のページをうまく抽出しています。私は変換を行うためにimagemagickを使用しています。

convert cover.pdf cover.png

これは動作しますが、残念ながらcover.pngは正しくレンダリングされません(PDFのアルファオブジェクトの一部が正しくレンダリングされない)。ImageMagickが変換を行うためにGhostScriptを使用していることは知っていますし、私がgsで直接それを行う場合、望ましい結果を得ることができますが、私はむしろ、私が活用したい他のツールを持っているので、変換ライブラリを使用したいのです。

GhostScriptのこのコマンドは目的の画像を実現します。

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

GhostScriptに引数を渡す方法はないのでしょうか?

どのように解決するのですか?

1つのコマンドラインに2つのコマンド( gs , convert ) をパイプで接続し、最初のコマンドがその出力を標準出力に書き出し、 2番目のコマンドがその入力を標準入力から読み取ることができる場合です。

  1. 幸いなことに、gsはstdoutに書き込むことができます( ... -o %stdout ... ).
  2. 幸運なことに、convert は標準入力から読み込むことができます ( convert -background transparent - output.png ).

問題解決しました。

  • 特殊な画像のアルファチャンネル処理に使用されるGS。
  • 透明な背景を作成するために使用される変換。
  • pipeは、ディスク上の一時ファイルを書き出さないようにするために使用します。

完全なソリューションです。

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png


更新情報

PDFのページごとに別々のPNGを表示させたい場合は %d 構文を使用します。

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

という名前のPNGファイルが作成されます。 page-000.png , page-001.png , ... (ただし %d -のカウントはゼロベースです --。 file-000.png は PDF の 1 ページに対応します。 001 は2ページ目に対応します...

また、透明な背景を維持したい場合、100ページのPDFの場合、次のようにします。

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done