kirinwikiblogスマートフォン用の表示で見るkirinwikiblogこの広告は、90日以上更新していないブログに表示しています。2016-02-22自炊データのリーダーを作った自炊した本類のリーダーを普段いろいろ試すのだけど、どうも機能的に歯がゆいところが多かったので、自分が欲しい機能だけのものを作ってみた。Win32)で、PILライブラリとpygameライブラリが入っている環境で動くものができた。これで見られるデータは、下の三種類。ディレクトリ下の画像(ファイル名順)zip(cbz)ファイルの中の画像(ファイル名順)PDFの中の画像(ファイル中の出現順)スクリプト最終部近くのbookname変数を適当に変更してから実行する、といった感じに使う。ダイアログでファイル等を指定させたり、コマンドライン引数から見たいデータを受け取るようにすることは難しくないが、ここでは特に実装を示さない。フルスクリーンで動かすか、ウィンドウで動かすかはスクリプトを直接変更して調整する。main関数のあたりを探せばわかるはず。操作はキーボードからのみ。表示品質のトグル(低品質モードだと、ページめくりが早くなる。終了Jpeg画像は、コントラストをすこし強めて表示している。自炊した画像って、ちょっと薄めなことがあるので。PILモジュールのPIL.ImageEnhance.Contrastで簡単にできる。ページのアスペクト比は特に調整せず、見開き状態で画面いっぱいに拡大している。見た目が変わっても、縦長の本ならたいてい問題ないので、今のところはこのまま。スクリプト内で特に難しいことはしていないが、PDFファイルから直接画像データを抜き出して表示させられるようになったのがちょっと面白いところ。終わるまでが実際の画像データ(など)であることがわかる。Jpegなら、ここを直接バイナリレベルで抜き出してやればよい。示されていることで判断できる。場合は、生のビットマップデータが圧縮されているってこと。zlib.decompressで展開できる。PILライブラリは展開後のこのデータを画像データとして読み込むことができる(PIL.Image.frombuffer)ので、利用した。白黒反転状態なので、適宜直す。ビットマップは1ビット色であると勝手に前提している。(自分が持っている自炊系PDFではみんなこれだったし。)stream部以外は、PDFは一行ずつ読めるデータの集まりである。最初はファイルのreadlineで十分対応できると思ったのだけど、PDFを作ったり編集した環境によって、改行コードに"\x0D"や"\x0A"や"\x0D\x0A"が混在していて、動作結果が不安定だった。これらはlinesgen_crlfっていう関数をひとつ作って対応した。画像データ以外は全部無視してPDFを扱っているので、ほとんどのPDFはまともに表示することができない(っていうか、たぶん落ちる)。ScanSnapなんかを使って作った、自炊系データだけがそれなりに見られる。PDFから無劣化で画像を取り出す方法がわかったので、これはいろいろ役に立つね。モノクロスキャンは、FlateDecodeフィルタじゃなくてCCITTFaxDecodeを使うようになってるみたい。Group4という高圧縮アルゴリズムを使うため。この形式だと今は扱えないなあ。18:38自炊データのリーダーを作ったTweet広告を非表示にする関連記事2014-07-18IPアドレスから国名を知るIPアドレスから国名を知る方法について、ときどき必要になった...2014-02-15ステンシルを着色画像に合成する前回のつづき。ステンシルを着色画像に直すには、まずはpython...2014-02-15画像からクリップアートを切り抜き、ステンシル化する前回のつづき。手描き画像を取り込んで着色し、そこからクリッ...2014-02-15手描きからGIMP用作業ファイルに変換クリップアートを公開するサイトを作ってみた。自炊データのリーダーを作ったIPアドレスから国名を知るLimeSurveyのインストールサーバー証明書のつくりかたと、その原理システムを企画するときの覚え書き月別アーカイブはてなブログをはじめよう!yamatt2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。