1

現在、ImageMagickconvertユーティリティを使用しています。GIF に変換するのに約 90 秒かかる PostScript ファイルがあります。

オプションを「変換」に変更することで、これを適切に行うためのより高速な方法を探しています。

「速い」と言うとき、理想的には数秒ですが、大幅な速度アップが必要です。インタラクティブな GUI に適したもの。

これは白黒またはグレースケールでのみ必要です(具体的には、地震データの「ウィグルトレース」の画像であるため、白黒でかまいません。)

その他の許容される形式は、BMP、GIF、JPEG、JPG、PCX、PGM、PNG、PNM、PPM、RAS、TGA、TIF、または TIFF です。

すでにインストールされている ImageMagick を使い続け、上司に何か新しいものを売り込まないようにしています。他の提案を聞いてまだうれしいです。

4

2 に答える 2

4

私の提案は次のとおりです。 Ghostscript を使用してください。

動作する ImageMagick が既にインストールされているため、Ghostscript もそこにあることを意味します。ImageMagick は、PDF や PostScript をラスター イメージに変換することはできないため、これを行うにはデリゲートとして Ghostscript を呼び出す必要があります。

Ghostscript は、PDF/PostScript 入力を TIFF/TIF/TIFFg4、JPEG、PBM、PCX、PNG、PNM、PPM、BMP ラスター イメージ出力に直接変換できます。

利点は次のとおりです。ImageMagick を使用する必要はありません。そのため、より高速で、変換パラメーターをより直接的に制御できます。ImageMagick を介して Ghostscript を実行する場合、これは常に必要とは限らない間接的なレベルです。(Ghostscript が生成したラスター イメージ データに微調整と後処理の操作を追加する必要がある場合がありますが、それは当てはまらないようです。)

唯一の欠点は、 Ghostscript が GIF を生成できないことです。GIF が必要な場合(必要ないようです)、Ghostscript のラスター出力を GIF に後処理するために ImageMagick が必要です。

ImageMagick が Ghostscript を呼び出す方法 (および呼び出しに使用するパラメーター - 、またはまたはを含むstderrの出力行を探す) を確認するには、次の例を実行します。gsgsxgswin32cgswin64c

 convert -verbose some.pdf[0] some.gif

アップデート

私は非常に非科学的な「ベンチマーク」を実行し、次の 2 つのコマンドをそれぞれ 100 回実行しました。これは、ランダムに選択された公式 PDF 仕様 (PDF-1.7 の ISO バージョン)の 333 ページを GIF に変換し、消費された時間を測定しました。 . これらのコマンドを同時に並行して実行したため、どちらも同じ全体的なシステム負荷を処理する必要があり、結果が比較しやすくなりました。

  1. ImageMagick を使用して「快適に」 convertGIF を直接生成する:

    time for i in $(seq -w 1 100); do
        convert                      \
           PDF32000_2008.pdf[333]    \
           p333-im-no_${i}.gif ;
    done
    
  2. convertGhostscript を使用して同じページのグレースケール PNG から作成し、 GIF を取得するためにGhostscript の出力を ImageMagick にパイプします。

    time for i in $(seq -w 1 100); do
        gs                      \
          -q                    \
          -o -                  \
          -dFirstPage=333       \
          -dLastPage=333        \
          -sDEVICE=pnggray      \
           PDF32000_2008.pdf    \
        |                       \
        convert                 \
          -                     \
           p333-gs-no_${i}.gif ;
    done
    

最初のコマンドのタイミング結果(「快適」を実行しconvertて PDF->GIF 変換を実現します。これは、Ghostscript を「背後で」のみ使用します):

real  2m29.282s
user  2m22.526s
sys   0m5.647s

2 番目のコマンドのタイミング結果gs(直接 + オープンに実行し、出力をconvert次の場所にパイプします。

real  1m27.370s
user  1m23.447s
sys   0m3.435s

もう一つ:

  • 100 個の「Ghostscript」-GIF の合計サイズは 1.6 MB でしたが、8 ビットのグレースケールでした。

  • 100 個の「ImageMagic-direct」-GIF の合計サイズは 1.2 MB でしたが、2 ビットの黒 + 白でした。

  • 結果のファイルをより厳密に比較できるようにするために、テストコマンドラインパラメーターをさらに調整する動機は現在のところありません。

この結果 (149 秒対 87 秒) は、私の推奨事項に従えばパフォーマンスが大幅に向上するという私の推測に十分な自信を与えてくれます。:-)

于 2012-09-26T18:10:32.180 に答える
1

現在、ImageMagick変換ユーティリティを使用しています。GIFに変換するのに約90秒かかるPostScriptファイルがあります。

「変換」するオプションを変更することで、これを適切に行うためのより高速な方法を探しています。

私が「速い」と言うとき、理想的には数秒ですが、私はかなりのスピードを上げます。インタラクティブGUIに適したもの。

これは白黒またはグレースケールでのみ必要です(具体的には、地震データの「ウィグルトレース」の画像であるため、白黒で問題ありません)。

GhostScriptから始めることができます:

 gs -dSAFER -dBATCH -dNOPAUSE \
    -sDEVICE=pnggray -r300 -sOutputFile=seismic.png seismic.pdf

非常に長くても興味深い方法は、これらのPDFの内容を正確に分析することです。

私はEKGワークフローのPDF出力と同様のことをしなければなりませんでした。元のデータは利用できず、PDFしかありませんでしたが、PDFがラスターではなくベクターベースであることがわかりました。少しハッキングした後、ラベル、凡例、およびEKGダイアグラムを構成する単一の基本線をデコードするのは非常に簡単で、グレースケール画像のように見えるものからトラックの色を変更するオプションを思いつきました。しかし、それは数日かかりました。

PDFが同様の方法で生成され、データがデコードされる可能性があります(最初はpdftk、非圧縮PDFを取得するために使用する必要がありました。次に、使用できるライブラリを見つけました。これにより、Deflateアルゴリズムが実装されました。 )。SVG形式で出力するのは本当にクールでしょう:-)

于 2012-09-26T21:18:08.607 に答える