2012-01-06 7 views
5

私はスキャンした本のPDFを持っています。画像はJBIG2形式です(B & W)。私はこれをベクトルPDFに変換したいと思います。イメージを抽出してPotraceを使ってPDFベクトルグラフィックス命令に変換することで簡単に行うことができます。PDFでベクトルを圧縮/最適化する

この理由は、Kindleなどの電子書籍リーダーデバイスでPDFを円滑かつ迅速に表示するためです。 JBIG2ではこれをうまくやっていません。設定に応じて、KindleはPDFを表示することができず、その固定でも各ページのレンダリングに時間がかかります。ベクトルPDFでは、パフォーマンスははるかに良く、レンダリングは非常に鮮明です。

問題は、結果のPDFがファイルサイズが巨大であることです。最大ストリームにgzcompressedされたとしても、ページあたり300KB(元のJBIG2イメージは1ページあたり30KB)でした。

ファイルサイズがはるかに小さくなるようにベクターグラフィックスを最適化する方法はありますか?ここで

はベクトル描画命令のセグメントである:

0.100000 0.000000 0.000000 0.100000 0.000000 0.000000 cm 
0 g 
8277 29404 m 
8263 29390 8270 29370 8289 29370 c 
8335 29370 8340 29361 8340 29284 c 
8340 29220 8338 29210 8323 29210 c 
8194 29207 8141 29208 8132 29214 c 
8125 29218 8120 29248 8120 29289 c 
8120 29356 8121 29358 8150 29370 c 
8201 29391 8184 29400 8095 29400 c 
8004 29400 7986 29388 8033 29357 c 
8056 29342 8057 29338 8057 29180 c 
8058 29018 l 
8029 29008 l 
8012 29002 8001 28993 8003 28986 c 
h 
f 

私は数字が非常に簡単にまで圧縮することができることを考えたが、どうやらないだろう。 1ページは800KBの非圧縮(上記)と300KBのgz圧縮です。私は、命令がすべて同じような範囲の数値であることを考慮して、圧縮率がはるかに良いと思っていたでしょう。

+1

CCITT-G4でイメージを再保存してみましたか?それはJBIGよりも約10-15%大きくなり、すべての視聴者に簡単に表示されるはずです。 – BitBank

答えて

1

私は恐れていますが、これについて行うことはあまりありません。

もちろん、(Deflateの代わりに)PDFページストリームでLZW圧縮を使用しようとするかもしれませんが、おそらく大きな違いはありません。

もう一つの提案:

  • 可能な限りスムーズなソース画像/できるだけ多くの詳細を削除します。これにより、変換中の曲線が少なくなる(つまりデータが少なくなる)可能性があります。
  • PDFページストリームで値を最適化するようにしてください。たとえば、スケーラビリティ/翻訳オペレータの洗練された組み合わせとデータの変更を使用しようとする場合があります。ここでの目標は、オペランドの長さを減らすことです。

たとえば、すべてのオペランド(浮動小数点除算ではなく整数を使用)を、たとえば100で除算し、最初の演算子の前にスケーリングを追加しようとする場合があります。しかし、このアプローチはおそらく視覚品質を低下させるでしょう。

もちろん、これをほんの一握りのファイルにするつもりなら、それは時間のかかるものではないと言います。

+0

一握りのファイルよりもはるかに多いですが、ええ、私はあなたのことを知っています。 LZWはデフレートより悪化します。私の他の選択肢は、イメージをセグメントに分割し、類似点を検出しようとし、フォームxobjectsを使って自分自身のシンボルエンコーディングを効果的に実装することです。私は前にそのようなことをしましたが、何かが間違ってしまう傾向があります。 – Alasdair

関連する問題