AppStoreから購入したiPhoneアプリの中の画像を読みたい件

購入したアプリのipaファイルを解凍しても、そのままでは中にある画像ファイルが読めません。今まではスルーしてたんですが、自分でアプリ作るっていうので、見る必要が出てきたので調べてみました。

調べてみると、この画像はCgBI file formatという、PNGを少し弄った形式のファイルになっているようです。PNGにCgBIという拡張チャンクを追加するだけでなく、IDATチャンク内のピクセルデータを弄ったり、CRCを削ったりするせいで普通のPNG Viewerでは見れないという事ですね。libpngが対応してるのかどうかは知りません。調べてません。

変更処理が分かっているので、じゃあ元に戻せば良いやんというので、コンバートスクリプトを途中まで書いたのですが、思ったより面倒でやる気がなくなったので、なんか無いのと思い探してみると、AppleがPNGとCgBIを相互に変換するコマンドラインツールをXcodeにバンドルしていました。なんという時間の無駄。ツール名はpngcrushで手元では以下の場所にありました。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/pngcrush

出力ディレクトリとターゲットファイルを指定して使います。

$ pngcrush -revert-iphone-optimizations -d <dest_dir> <target_file>

xargsを使って一気に変換すると便利です。便利な割に全然使われてない気がするので、Xcodeにバンドルされてるコマンドラインツールは一通り見ておいた方が良いのかもしれません。

$ ls   # imgディレクトリに変換前の画像がある
img
$ mkdir converted # 出力先のディレクトリを作成
$ cd img
$ find . | xargs -IX pngcrush -revert-iphone-optimizations -d ../converted "X"

それで、ちょろちょろ色々なアプリの中身を見ているのですが、小綺麗なアプリはどれも画像の量がハンパ無くて、Path.appとかだと700種類くらいです。@2xの分合わせて1400個とかリソース使われてて、引いてます。画像極力使わず適当に小綺麗なアプリ作りたいなぁと思う今日この頃です。

Leave a Reply

Your email address will not be published. Required fields are marked *