画像合成の高速化
cakephpとは直接関係ありませんが、画像合成のプログラムを作っています。
定石通り(?)ImageMagickのconvertコマンドを実行して処理しようとしているのですが、なかなか速度がでない。(500x500に1回合成で、0.18s)
ウノウさんのブログでも、k-tai.orgさんでも、直接convertコマンドを呼んでいるみたいなのですが、どのような高速化をしているんだろう。。。
http://ke-tai.org/blog/2008/06/30/imgnoforward/
グーグル先生にお知恵を拝借したところ、ちらほら、GraphicsMagickが良いみたいなURLがありました。
http://akimoto.jp/blog/2009/04/05/flickr-php5-migration-performanc/
http://www.graphicsmagick.org/benchmarks.html
ということで、ImageMagickから、その派生ソフトウェアであるGraphicsMagickを使ってみました。そうすると、、、おぉ!!!!
合成処理をtimeコマンドで比較してみたところ、速度面では7,8割増の性能を得ました!以下の例は、480x500の画像ファイル(Base.jpg 16bit)にい250x250(item.gif)を合成(out.jpg)しています。
#time convert base.jpg item.gif -geometry +0-0 -composite out.jpg
real 0m0.181s
user 0m0.443s
sys 0m0.025s
#time gm composite -geometry +0+0 itme.gif base.jpg out.jpg
real 0m0.103s
user 0m0.251s
sys 0m0.012s
んー、GraphicsMagickにするか。な。。
CakePHP1.3にしたらau機種(一部)の文字化けで悩んだ
ケータイ向けサイトをcakePHPで作っています。
絵文字を変換するために、HTML_Emojiというライブラリを利用させてもらっているのですが、1.2.5から.1.3.2にバージョンアップしたところ、フォームで渡される文字列が文字化けし始めました。なぜ??と思って、少しハマっていたところ、Formヘルパのcreateが出力する文字列が違うことに気がつきました。
//1.2.5では、 $form->create('User',array('action'=>'confirm',,'url'=>array('?'=>'guid=on'))); //とすると <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on"> //となると思います。(div,inputは省略) //1.3.2では $form->create('User',array('action'=>'confirm',,'url'=>array('?'=>'guid=on'))); //すると、出力が <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on" accept-charset="utf-8"> //となります。
「accept-charset」??
そして、accept-charsetを入れると、UTF8をサポートしていない(と思っていた)auも、mb_detect_encodingで調査するとフォームからUTFで返すようでした。(URBANO BARONEで検証、でもW61Pは文字化けしなかった。)
そこで、ググってみると、CookBookのimprovementsにこうありました。
Forms now get an accept-charset set automatically, it will match the value of App.encoding, it can be overridden or removed using the 'encoding' option when calling create().
// To remove the accept-charset attribute. echo $this->Form->create('User', array('encoding' => null));
ということで、
$form->create('User', array('action' => 'confirm','encoding'=>null,'url' => array('?' => 'guid=on'))) //出力 <form id="UserConfirmForm" method="post" action="/users/confirm?guid=on">
めでたくaccept-charsetが消えて、文字化けも解消されました!
ケータイ向けにサイトを作成しているみなさま、お気をつけくださいまし!