新しい画像ファイルBPGを使う
"BPG Image format"という新しい画像ファイルフォーマットが出てきている。
まだViewerがなくて、デフォルトで見るにはJavaScriptを使わないと見えないけど、圧縮率も高いようなので使ってみた。
それとマジックバイトも気になったので見てみた。
BPGのサイトはこちら。
特徴はざっとこんな感じ
- 高い圧縮率。JPEGよりも遥かに小いサイズだが同程度の品質
- JavaScriptのデコーダさえあれば、ほとんどのブラウザでサポート
- JPEGと同じchroma format(彩度とか輝度とか)。これにより、変換による劣化を低減
- 圧縮時のロスがない(可逆ってことですかね)
- EXIF, ICC profile, XMPとかのメタデータも含められる
なお、今回はWindows環境にて試している。
特にレジストリ書き換え等もないため、ファイルを配置するだけで利用可能である。
BPGファイルの生成
まずはBPGファイルを利用するために、ページからBPGのエンコーダをダウンロードする。zipを解凍して、そのフォルダにjpgとかpngファイルをコピーする(今回は "in.jpg" )。
あとは元の画像ファイルを引数としてエンコーダを叩いてあげるだけ。
CMDでやるならば、以下の1行で良い。カレントディレクトリにファイル"out.bpg"が出力される。
C:\Users\rintaro\bpg-0.9.3-win32>.\bpgenc.exe in.jpg
もしくは、元の画像ファイルを"bpgenc.exe"までドラッグ&ドロップしてあげればいい。
元の画像ファイルと同じフォルダに"out.bpg"が出力される。
※ちなみに、jpgとpngは変換できたが、bmpとgifはできなかった。
C:\Users\rintaro\bpg-0.9.3-win32>bpgenc.exe in.gif Not a JPEG file: starts with 0x47 0x49 C:\Users\rintaro\bpg-0.9.3-win32>bpgenc.exe in.bmp Not a JPEG file: starts with 0x42 0x4d
BPGファイルの閲覧
先にも書いたが、WindowsにはまだViewerがないようで、JSにより復元する。解凍したフォルダの中に、htmlというフォルダが入っている。
サンプルを見ると、その中の"bpgdec8b.js"を利用すると閲覧できるようだ。
同じフォルダに、生成したBPGファイルを入れ、以下のHTMLを書く。
<html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="bpgdec8b.js"></script> </head> <body> This is a bpg.<br /> <img src="out.bpg"> </body> </html>
BPGファイルの指定は、jpgなどと同様にimgタグで指定すればよい。
あとはこのHTMLファイルを開くだけ。
ちなみにサイズを見てみると半分以下。なかなか賢い。
ちゃんとJPGとの比較・評価はしてないけど、見た目変なところはないし、サイズも小さい。閲覧さえ簡単になればいいと思った。
jpgとの比較結果を見たければ以下サイトとかを見るといいと思う。
JPEG画像の約半分のファイルサイズで同品質のものを表示できる画像形式「BPG」が誕生、実際に使ってみるとこんな感じ - GIGAZINE
BPGファイルのマジックナンバー
このBPGファイルに対してfileコマンドを打ってみる。もちろん結果は、
[rintaro@rintaro_PC] $ file out.bpg out.bpg: data
見事にdataとなっている。
ただ、hexを見てみると、先頭6バイトがは固定されている。
[rintaro@rintaro_PC] $ xxd out.bpg|head 0000000: 4250 47fb 2000 8161 8161 8656 0392 4740 BPG. ..a.a.V..G@ 0000010: 4401 c190 9581 1200 0001 2601 af26 e7ab D.........&..&.. 0000020: 7ff8 8039 a57d b4fe d6b5 3465 fcad 2004 ...9.}....4e.. . 0000030: 731f 8c55 04c3 539d 401b 8be7 9035 3cc4 s..U..S.@....5<. 0000040: 9949 138c e9dd 923c 82b5 29be 6d1d 6206 .I.....<..).m.b. 0000050: 3a0d fdf3 644f 1eae b436 4dab e746 390c :...dO...6M..F9. 0000060: 62e5 009d 4eaa 56de 1aaf d933 af4a 9abe b...N.V....3.J.. 0000070: 4aac 27d1 2308 ec00 de20 0b6c 20a6 ac1e J.'.#.... .l ... 0000080: 7c8a 7cc1 392d 0811 b24f 9bd4 4d9b 5662 |.|.9-...O..M.Vb 0000090: 561f 802f 29a1 af56 d343 9860 ab7c 17cf V../)..V.C.`.|..
ASCIIだと先頭3文字が "BPG"から始まる。hexだと "4250 47fb 2000" となっているのがBPGファイルだ。
もしCTFとかでなんかわからんファイルが出てきて、先頭が"BPG"となっていれば、画像ファイルとして復元できるだろう。
というか、そのうちfileコマンドが対応するよね。メジャーになればだけど。
それまでは、目grepでがんばることにする。