?

Log in

No account? Create an account

Entries by tag: zip画像縮小!

アプリ「本をスキャンした画像ZIPを縮小してPDFにする!」
karino2
「本をスキャンした画像ZIPを縮小してPDFにする!」略して「zip画像縮小!」というアプリを作りました。

Google Playのリンク: https://play.google.com/store/apps/details?id=com.livejournal.karino2.archiveimageresizer
ソースコード: https://github.com/karino2/archiveimageresizer


以下Google Playより引用

本をスキャンした画像のzipに対して、各ページを縮小してpdfにします。
ノンブルの推定等も自動で行い、かなりアグレッシブに余白を除去します。
アプリの略称は「zip画像縮小!」とします。

主な機能は以下の通り
- zipからpdfへの変換
- 各ページのリサイズ
- 余白を自動で検知して除去
- 周辺のノンブルやゴミを自動で検知して除去
- 16階調へのグレースケールへの変換とガンマ補正

スマホ上にフルサイズのzipを持って置いて、必要になる都度Kindle3用にリサイズしたpdfを作って送る、という用途を想定しています。
現時点では主にKindle3を想定してデフォルトのパラメータを決めています。
グレースケール化は16階調のみ対応、ガンマ補正のガンマ値は1.6固定です。

本アプリはオープンソースのライブラリ、Android PDF Writerを使用しています。

Android端末を母艦としてフルサイズのzipを持っておき、Kindle3などのe-inkデバイスに必要に応じて本を送る、という使い方を想定しています。
リサイズのサイズなどは選べますが、あまり大きなサイズにする事は想定していません。具体的には一辺が1600px以上のサイズにする事は想定していません。
Kindle 3以外のe-inkデバイス対応は反響を見て考えます。

デフォルトの振る舞いはしばらく変更していく予定です。

「zip画像縮小!」途中経過
karino2

ノンブルの推測と余白除去までは終わった。
変換したPDFを見ているが、たまにノイズに負けてるページもあるけれど、現時点でも十分実用にはなってると思う。

ただ、使ってみると途中でサービスが殺される事があまりにも多いので、途中再開は必須と認識を改める。そこまでは作るか。

4ビットグレースケール化とガンマ補正を作り、途中再開出来るようになったらリリースかなぁ。
年内になんとかなるかしら?

当初はここまでしっかりした物になるとは思ってなかったけれど、想像以上に良い出来になったので、真面目に開発しようかなぁ、という気になってきている。
流行った時野為に広告入れておいた方がいいかなぁ。
どうせ画面は余ってるが、広告の為だけにネットワークパミッション入れるの嫌なんだよなぁ。アタックサーフェス広がるし。

まぁ最初は広告無しで、継続的に開発する気になったら広告入れるかなぁ。
めっさ星1にする奴とか居そうだが。


zip画像圧縮!ギターの楽譜をKindle3で読めるように!
karino2

とりあえずスキャンしてるサイズの縦と横を半分ずつにしてKindle3に持っていった所、かなり快適に使えてる。
拡大縮小が良く出来てて、しかも結構早いので満足。次の曲を練習しはじめる、という自分の目的は達成出来た。

途中、何故か生成したPDFがKindle3でだけ見られない、という事態に遭遇するが、結局クロスリファレンスの行末尾に空白があるとKindle3はエラーになる、ということの模様。
これを突き止めるのは相当苦労したが、出来上がったPDFの満足度が高いので良しとします。

これでとりあえず最低限目的は達成出来たので、あとはどこまでやるかだなぁ。
とりあえず今回の用途で使う、という視で考えて意味不明に見えるUIを一通り直したら一旦リリースかなぁ。
サービスが途中で殺された時の挙動がまだいろいろおかしいが、この辺は最初のリリースでは我慢かな。

ちなみに現状は単純にAndroidの標準のbmpのリサイズを使ってるが、やはり薄い。ガンマ補正は要るなぁ。
16階調化も入れたい。この2つでとりあえず使い物にはなるかな。

最初に試すデータが3000x2000でスキャンされてる、100ページくらいの本とかで、OutOfMemoryExeptionとかKindle3でだけ何故か開けない、とかと戦うのは、なかなかドッグフーダーだよなぁ。
限界にチャレンジする最初のユーザーは作者たれ。


zip画像圧縮!、とりあえず動くように
karino2

手元のジブリ楽譜を変換する所までは出来た。
もともとAndroidPDFWriterはDOMを作って全部バンと書くモデルなのだが、それでは画像たくさんのPDFではあっという間にメモリ不足になってしまう。
自分の場合は使うのは各ページに一画像のみなので、使うAPIも少ないし、なんとなくストリーム化をする。
ただ最後にCrossReferenceのセクションなどがあるので、微妙に情報は残す必要があり、いかにそれ以外をちゃんと捨てるかをリークと戦いながら頑張った。
また、もともとテキストエンコーディングのみ対応なのをバイナリ対応したりとか、結構いろいろいじった。
これだけのクイックハックを2日でやる俺は只者では無い。

とりあえず動くのだが、肝心のジブリの楽譜はもともと大版の本なので、Kindle3のドットバイドットではさすがに読めない。
どうしよっかなぁ。

1. ページ2分割を実装
2. 少し大きめで試してみる
3. 縮小無しを試してみる

もともと楽譜のzip書庫をつっこんだら、開くのもページめくりも遅すぎて使い物にならなかった、というのが事の発端。
だから選択肢3で、ただPDF化するだけで早くなる可能性はゼロでは無い。まぁたぶんダメだろうが。

まだまだいろいろハードコードだったり出来てない事は多いが、ここまで来れば完成まで出来るかなぁ。


「zip画像縮小!」のレポジトリを作る
karino2
「自炊zip画像を縮小したい!」略して「zip画像縮小!」の進捗。

とりあえずzipを読んでpdfを吐く、というコードは動いた。
ただし、肝心のジブリ楽譜はでか過ぎてOutOfMemoryException。
という事で1ページ目だけ処理して抜けるようにしてライブラリが動いている、という動作確認だけしておく。

1ページのリサイズまでは出来ているので、やはりAndroid PDF Writerをストリーム対応しないとダメだなぁ。
コードを眺めた印象だと、自分の目的だけquick hackで動かすならなんとかなりそうだな。
大切なのは自分がギターソロの楽譜をKindleで読む事なので、quick hackだろうがなんだろうがこのファイルを変換出来るようにしなくてはならない。

という事でがちゃがちゃいじる前にレポジトリを作る事にした。
https://github.com/karino2/archiveimageresizer

とりあえず適当にストリーム対応をする訳だが、ちょっと大変だにゃ〜。

Androidのpdfライブラリ
karino2
Kindle3はzip書庫はいまいち、とどっかで見た気がするのでとりあえずpdf出力一択にしよう、と思う。
pdfは昔触った事あるんだよなぁ、確かiTextで、、、とサイトを見ると、有料になってる!

うーん、画像pdf作るだけ、という非常に簡単な用途なので、そんなのじゃなくてもいいのになぁ。という事でライブラリを探す事に。
ググってると、以下のサイトが良くまとまってる。

http://www.wondershare.com/pdf/android-pdf-library.html

なお、KitKatならPrintedPDFDocumentとかいうのがあるけれど、私のギャラノで動かないと意味が無い。
という事でAndroid PDF Writerを試す事にしよう。

Instructionが無かったので書いておいた: http://karino2.livejournal.com/293016.html ついでにStackoverflowデビューしておく

アプリ、「自炊zip画像を縮小したい!」を作る事にする
karino2
手持ちのジブリのギターソロの自炊データをKindleに移したら解像度が高すぎて開くのが遅い…
ではSend to kindleを試してみよう、としたらgmailの添付ファイルは20Mまで、とか言われる。

ぐぬぬ。どうしたらいいんだ!?
手持ちのWindows機は遥か押入れの奥でChainLPの使えるマシンも無い(Macで動かすのも可能らしいが)。

どうしたもんかといろいろ考えた結果、旅先で使う事を考えると、Android上で動くChainLP 的な物が必要、という結論に。
縮めれば20Mを下回る事は多いし、ファイルを移すだけならUSBでどうにかなるに違いない。

という訳でAndroidで動くChainLPもどき的な何かを作る事にしました。
名前は「自炊zip画像を縮小したい!」略して「zip画像縮小!」とします。
まずは曳光弾としてzipを読み込んでpdf吐く一択で、リサイズのみ。サイズ決め打ち。