ラベル ImageMagick の投稿を表示しています。 すべての投稿を表示
ラベル ImageMagick の投稿を表示しています。 すべての投稿を表示

2012年2月1日水曜日

fi-6140Z の圧縮率と画質

fi-6140Z で圧縮率を決めるために画像(JPEG)を採取したので記録。

次の表は、fi-6140Z で輪郭強調を適用しなかった場合の画像(一部を切り出し)。

機種 解像度 圧縮率 輪郭強調 画像 レベル補正 サイズ
fi-6140Z300dpi4無効
367005
fi-6140Z300dpi5無効
495482
fi-6140Z300dpi6無効
927102
fi-6140Z300dpi7無効
1294695
fi-6140Z600dpi1無効
635112
fi-6140Z600dpi2無効
688801
fi-6140Z600dpi3無効
792883
fi-6140Z600dpi4無効
1023928
fi-6140Z600dpi5無効
1275038
fi-6140Z600dpi6無効
1866023
fi-6140Z600dpi7無効
2460278
ScanSnap S1500300dpi2無効
  414252
DR-2510C300dpi2中央
  507601
DR-2510C600dpi2中央
  1279042
GT S630300dpi  
  959709

次の表は、fi-6140Z で輪郭強調を適用した場合の画像。

機種 解像度 圧縮率 輪郭強調 画像 レベル補正 サイズ
fi-6140Z300dpi5無効
495482
fi-6140Z300dpi5
563933
fi-6140Z300dpi5
671347
fi-6140Z300dpi5
724185
fi-6140Z600dpi5無効
1275038
fi-6140Z600dpi5
1460641
fi-6140Z600dpi5
1695673
fi-6140Z600dpi5
1770682
  • 原稿の印刷は薄目
  • 各画像は、GIMP を使用して手動で切り出し
  • 300dpi の画像は、convert -scale 200% で拡大
  • 600dpi の画像は、拡大無し
  • レベル補正は、convert -level 20%,95%
  • サイズは、ページ全体のファイルサイズ(バイト)
  • fi-6140Z JPEG 保存の圧縮率は 1 から 7 で指定し、7 が低圧縮(高画質)
  • 追記:fi-6140Z PDF 保存の圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • ScanSnap S1500 PDF 保存の圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • DR-2510C JPEG 保存圧縮率は 1 から 5 で指定し、1 が低圧縮(高画質)
  • ScanSnap S1500 の輪郭強調は、読み取りモードオプションの「文字をくっきりします」
  • DR-2510C の輪郭強調は「エッジ強調」、無効に出来なかったので中央に設定

以下はこれらの画像を眺めて考えたこと。

  • ScanSnap S1500 や DR-2510C と同等のサイズにする場合、fi-6140Z では 300dpi 圧縮率 5となる
  • 輪郭強調を無効にしていると、DR-2510C に比べてぼやけている
  • レベル補正を行ったり、輪郭強調弱を適用すれば、ほぼ同等の画像になる。
  • DR-2510C は補正がかかっている?
  • 300dpi 圧縮率 5 と 6 の間で画質の差がかなりあるが、ファイルサイズを見ると、300dpi 圧縮率 6 は 600dpi 圧縮率 4 に近くなる
  • 300dpi 600dpi 共に、圧縮率 4 5 6 間で目に見える画質の差があるが、圧縮率 6 と 7 の差はさほど感じない

2011年1月11日火曜日

EPUB へ移行

いままで、自炊した書籍は PDF 形式で閲覧していましたが、これを EPUB 形式に変更。 直接的な理由は、ImageMagick の convert コマンドの不具合。

JPEG ファイル群を PDF ファイルに変換する際に、 convert のプロセスサイズが最大 2.8GB に達するのを観測しました。 実メモリ 4GB のマシン上で動かしており、 他に 1GB 弱の Firefox や 750M の VirtualBox も動いているので、 ほとんど処理が止まってしまうわけです。 仕様なのか、バグなのか、新しい版で直っている(変わっている)のか、 コンパイル環境による問題なのかは調べていません。 新しい版を試そうとは考えたのですが、新たな依存関係が導入されているようで、 構築に時間がかかるので今回は断念。

EPUB 形式を選んだ理由は、完全に公開された仕様で、JPEG 画像群から簡単に生成できること。 XML ファイルを手で作成・編集できますし、プログラムを作成して自動生成することも出来ます。 ちなみに、Linux で動作するとされている EPUB 編集ツールもオープンソースで存在するのですが、 依存関係の絡みで、今回は回避。

EPUB 閲覧用のソフトウェアは SONY Reader には標準で入っていますし、 Solaris 上では Firefox のアドオン、EPUBReader が良い感じで動いてくれるようです。

2010年12月28日火曜日

Sony Reader 用に 自炊 PDF を調整する手順の防備録

自炊した PDF は、そのままでも Sony Reader で表示できますが、 文字がかすれたりして、かなり読みにくいものになります。 そこで、一手間かけて、Sony Reader 専用の PDF ファイルに変換することにしました。 以下は、その手順の防備録です。

PDF ファイルから画像を取り出す

自炊した PDF ファイルは画像のみで構成されていますので、その画像を取り出します。 この例では、page-連番.jpg という名前で取り出されます。

$ mkdir tmpdir
$ cd tmpdir
$ pdfimages -j fromdir/元文書.pdf page

表紙を編集

表紙を読み込む際際、可能であれば切断せず、長尺読み取り機能を利用して読み込んでいます。 自炊 PDF を作成する際に、ScanSnap 付属のソフトウェアで90度回転したりトリミングしたりして、 PDF ビュワーで表示させる分には問題ないように編集しています。 ところが pdfimages はこれを処理できないようで、編集前の画像をそのまま出力します。

これでは困るので、gimp で表紙などを編集します。 基本的に向きの変更とトリミングのみ。 この例は、カバーと帯の表裏を編集する場合です。

$ gimp page-00[0-3].jpg

画素数の変更と余白の切り落とし

ImageMagick の convert で処理します。 Sony Reader の画素数は 600 x 800 らしいのですが、画像を表示する場合は 584 x 754 にあわせると、 劣化が発生しないそうです。 余白部分を多少削ると、文字の表示に使用できる面積が増えます。 削りすぎに注意。

$ mkdir a
$ (for f in page-*.jpg; do convert -resize 654x824
    -type GrayScale -shave 35x35 -normalize $f a/$f; done)

表紙やイラストなど、余白がない頁は別枠で変換します。

$ (for f in page-00[0-3].jpg; do convert -resize 584x754
    -type GrayScale -normalize $f a/$f; done)

調整済み PDF ファイルの作成

ImageMagick の convert で処理します。

$ convert a/*.jpg a.pdf

ただ、convert は作成する PDF ファイルのタイトル属性に、 作成するファイル名を設定します。 Sony Reader は、ファイルの一覧で、この属性を表示するのですが、 日本語の名前だと文字化けします。 属性が設定されていなければファイル名が使用されるのですが、 ファイル名に日本語が使用されている場合は問題ありません。

私の使用している版の ImageMagick では、 この動作をしないようにするオプションが存在しませんので、 ソースコードを変更して対応しました。

--- coders/pdf.c.back Wed Apr 28 22:05:40 2010
+++ coders/pdf.c Tue Dec 28 15:33:26 2010
@@ -2459,9 +2459,11 @@
   (void) FormatMagickString(buffer,MaxTextExtent,"%lu 0 obj\n",object);
   (void) WriteBlobString(image,buffer);
   (void) WriteBlobString(image,"<<\n");
+#if 0
   (void) FormatMagickString(buffer,MaxTextExtent,"/Title (%s)\n",
     EscapeParenthesis(image->filename));
   (void) WriteBlobString(image,buffer);
+#endif
   seconds=time((time_t *) NULL);
 #if defined(MAGICKCORE_HAVE_LOCALTIME_R)
   (void) localtime_r(&seconds,&

これで、Sony Reader 上でそれなりに読める PDF の完成です。 画質の改善は、今後の課題ということで。

おまけ: Solaris 機から Sony Reader 用の SDHC カードに書き込む

Sony Reader 用に調整した PDF ファイルは、 /m/books0/00-Sony-Reader/ にまとめて置いています。 Sony Reader は直接接続せず、SDHC カードを介して、PDF を渡すようにしています。 ファイルを一つ一つコピーするのは面倒なので rsync コマンドで一発。 --modify-window=1 を忘れると、毎回書き込みが発生するので要注意。

$ rsync -a --modify-window=1 -v /m/books0/00-Sony-Reader/
       /media/NO\ NAME/books

2010年5月26日水曜日

久々の ImageMagick

スキャナで取り込んだ画像を PDF に変換するために ImageMagick をインストールしたので、その防備録。

なぜ ImageMagick かというと、「convert JPEG to PDF linux」で探したら、ImageMagick で出来るよと言いうのがあったから。 ImageMagick は大昔は自分でインストールして使用していた時代がありましたが、最近はさっぱり。 標準のリポジトリを検索しましたが、見つからなかったので、自分でインストールすることに。

Google で「imagemagick source」を検索すると、一番上に求めるページが出てくるので、 素直にそこからソースコードをダウンロード。

$ wget -P /PATH/TO/DOWNLOAD/ ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz

続いて展開。

$ cd /PATH/TO/BUILD/
$ gtar xfz /PATH/TO/DOWNLOAD/ImageMagick.tar.gz
$ cd ImageMagick-6.6.2-0/

そして構築。 個人的に、ImageMagick のコマンド名の命名規則は許容範囲を大きく外れているので、 専用のディレクトリを作成してその下に入れることにします。 本当は Sun 謹製のコンパイラを使いたかったのですが、 構築時に警告メッセージ(軽微なものですが)が大量に表示されるので、 gcc を使うことにしました。

$ ./configure --prefix=/opt/free/imagemagick CC=/usr/gcc/4.3/bin/gcc CXX=/usr/gcc/4.3/bin/g++
$ gmake
$ gmake check
$ gmake install

実際に複数の JPEG ファイルを一つの PDF ファイルに変換するにはこんな感じ。

$ cd /PATH/TO/JPEG/
$ /opt/free/imagemagick/bin/convert *.jpeg target.pdf
$ acroread target.pdf