86

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

convert を介して引数を GhostScript に渡す方法はあるのだろうか、それとも GhostScript を直接呼び出すことにこだわっているのでしょうか?

4

11 に答える 11

73

最初のコマンドがその出力を stdout に書き込むことができ、2 番目のコマンドがその入力を stdin から読み取ることができる場合、パイプを介して接続された2 つのコマンド ( gs、 ) で 1 つのコマンドラインを使用できます。convert

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

問題が解決しました:

  • 特殊な画像を扱うアルファチャンネルに使用されるGS、
  • 透明な背景を作成するために使用される変換、
  • ディスク上の一時ファイルの書き込みを避けるために使用されるパイプ。

完全なソリューション:

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 ファイルが作成されます (-counting は 0 から始まることに注意してpage-000.pngください-- PDFのページ 1からページ 2 に対応します...page-001.png%dfile-000.png001

または、透明な背景を保持したい場合は、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
于 2010-07-31T20:14:02.793 に答える
33

利用可能なすべての代替手段の中で、PDF を PNG に変換するときに Inkscape が最も正確な結果を生成することがわかりました。特にソース ファイルに透明なレイヤーがある場合、Inkscape は Imagemagick や他のツールが失敗したところに成功しました。

これは私が使用するコマンドです:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

そして、ここではスクリプトで実装されています。

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."
于 2013-03-18T18:59:30.967 に答える
23

PDF を画像ファイルに変換するには、次のコマンドを使用します。

PNGの場合 gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

JPGの場合 gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

複数のページがある場合は、%03dという名前に追加します gs -o a%03d.jpg a.pdf

各オプションの意味:

  • sDEVICE={jpeg,pngalpha,png16m...} - ファイルタイプ
  • -o - 出力ファイル (%stdout から stdout へ)
  • -dTextAlphaBits=4 - フォントのアンチエイリアシング。
  • -r300~300dpi
于 2015-11-04T17:52:10.553 に答える
7

受け入れられた答えを得ることができませんでした。次に、GhostscriptがPNGだけでなく複数の異なる「エンコーディング」をネイティブにサポートしているため、実際にはソリューションがはるかに簡単であることがわかりました。

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

私のために働くシェルコマンドは次のとおりです。

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

pnggrayエンコーディングと 500 DPIを使用して、test.pdf のページ 2 を test.png に保存します。

于 2015-03-17T19:50:05.950 に答える
2

彼のスレッドが古いとはいえ、私の解決策を追加します。多分これはとにかく誰かを助けるでしょう。

まず、PDF を生成する必要があります。私はそのためにXeLaTeXを使用しています:

xelatex test.tex

現在、ImageMagickGraphicMagicはどちらもパラメーターを左から右に解析するため、一番左のパラメーターが最初に実行されます。最適な処理のためにこのシーケンスを使用することになりました。

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

実際にページ上にあるものに合わせてトリミングされた、透明な背景に素敵なグラフィックを表示します。-densityパラメータとパラメータを使用-resizeすると、粒度が向上し、全体的な解像度が向上します。

密度を下げることができるかどうかを確認することをお勧めします。変換時間が短縮されます。

于 2012-07-11T12:04:44.367 に答える
1

私の解決策は、はるかに単純で直接的です。少なくとも、私の PC ではそのように動作します (次の仕様で):

me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

だから、ここに私が私の上で実行するものがありますfile.pdf:

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png
于 2013-11-16T13:41:00.557 に答える