投稿日検索
2015年6月
1234567
891011121314
15161718192021
22232425262728
2930  

カテゴリー検索

【お知らせ】
●2013年1月以降の投稿をRetinaディスプレイに対応

最新のコメント
  1. はじめまして.現在,こちらの車両群を管理している団体の者です. 2004年時点…

,

シェルスクリプトで画像処理(4)bpg圧縮編

オマケの話です

昨年暮れに登場して一部でちょこっと話題になりました
“Better Portable Graphics”という画像圧縮フォーマットです
windows向けのアプリは出てきたようですが、残念ながらMac版バイナリはありません

Xcode使ってバイナリをビルドするスキルも根性も無かったので、指をくわえて様子見でしたが、Homebrewを導入することでかなり簡単にできるということが解ったので挑戦してみました(`・ω・´)
各種インストールの作業はターミナルのコマンドラインで行います

1.Command LineTools OSX for Xcodeの導入
実はここが最大の難関でした\(^o^)/
OSXがDVDで提供されていた頃はそこからインストールできたはずなのですが、今はappleのサイトからインストーラのDLが必要です

最新版(Yosemite)のXcode一式はapp storeから入手できるものの、10.9版はデベロッパーサイトにログインして超分かりにくいリンクをたどり、やっとこさ
“commandlinetoolsosx10.9forxcode6.2″を落とせました( ´・ω・`)

※後で分かったことですが、どうやらコマンドラインから
$ xcode-select –install
と打てば、ダウンロードからインストールまでやってくれるようですね(未確認)

※Homebrewのインストール時、Command LineTools環境が無ければインストールするか訊いてきますので、承諾して進めれば良いです

2.Homebrewの導入
Homebrew公式サイト
なんですが、面倒な話は置いといて、これをコマンドラインに打つ(というかコピペです罠)だけでインストールしてくれます

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3.bpgソースコードのDL
BPG Image format公式サイト
ダウンロード
DLしたら解凍して適当な場所に置きます
※どうもHomebrewでのインストールに必要では無いみたいですが、ブラウザ上でBPG画像を表示するためのデコーダー(JavaScript)があるので、落としておいた方が良いでしょう

インストール可能なものをコマンドラインからリストで確認

brew search

大量のリストが出てくると思いますが、”libbpg”が表示されていればokです

bpgバイナリをインストール コマンドラインに次のようにタイプします

brew install libbpg

※アンインストールは

brew uninstall libbpg

インストールできたら早速使ってみましょう
コマンドラインで直接変換する場合はこのような記述になります

bpgenc -q 20 -o output.bpg input.jpg

-q:品質(0-51)指定しないと28
-o:アウトプットファイルネーム 未指定だとout.bpgになる

まあ、ここは大量処理を旨とするのでスクリプトを書きましょう
例:デスクトップのprocessというフォルダ内にあるJPEG画像をQuality=20でbpgファイルに変換します

#!/bin/bash
cd /Users/psychic-wave/Desktop/process
for file in *.jpg
do
filen=${file%.*}
bpgenc -q 20 -o ${filen}.bpg ${file}
done

マルチコアを生かして大量処理するなら6行目と7行目をちょっと細工して

bpgenc -q 20 -o ${filen}.bpg ${file} &
done ; wait

とすれば良いでしょう

圧縮画像はこちら(別ウィンドウで開きます)
q=20 / 199kByte
q=28 / 103kByte

個人的にはq=28はのっぺり感が強くて、q=20くらいで良いかなと思いました
それでもJPEG90%に比べ、概ね半分のファイルサイズになりますね
境界の不明瞭な画像に対してはJPEGより遥かに大きな圧縮効率を発揮します

この画像の品質と圧縮サイズの関係はこのようになりました
compRatio” title=
(横軸の「-1」はpngのサイズです)

ただしcore i7でも960×640の画像1枚の変換に約6sec.かかりました
D7000のオリジナルサイズ(4928×3264=16MP)だと150sec.もかかります!

ブラウザで画像を表示させるためにはDLして解凍した libbpg-0.9.5/html/ 内にあるJavaScriptをhtml文に設置します
libbpg-0.9.5/html/index.html を参考にすれば良いでしょう
bpgdec.js … 14bitまで/アニメーション非対応
bpgdec8.js … 8bit専用 アニメーション非対応
bpgdec8a.js … 8bit専用 アニメーション対応
だそうです

また作成したアプリなどで相性の悪いJPEGファイルがあるようです
例えばsipsで100%以外の品質で作成されたJPEGファイルは上手く処理されず、0Byteのファイルが吐き出されます
(終)


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)