GDライブラリのおかしな性質
先日GDライブラリにはまって数時間とまったのでメモ。
まず下記のようなミニマムコードを書く。
$base = base64_encode(file_get_contents('/opt/www/hogehoge/214.png')); $gd2 = imagecreatefrompng('/opt/www/hogehoge/214.png'); ob_start(); imagepng($gd2); $base2 = base64_encode(ob_get_contents()); ob_end_clean(); ob_start(); imagegif($gd2); $gif3 = ob_get_contents(); ob_end_clean(); $gd3 = imagecreatefromstring($gif3); ob_start(); imagepng($gd3); $base3 = base64_encode(ob_get_contents()); ob_end_clean();
GDライブラリを通さずにbase64エンコードされた画像のバイナリデータとGDライブラリに入った画像を比較して、画像が壊れてしまっていないか実験。
ちなみに元画像には透過の設定がしてある。
if($base === $base2){ echo 'base === base2<br />'; }else{ echo 'base is not = base2<br />'; } if($base3 === $base2){ echo 'base3 === base2<br />'; }else{ echo 'base3 is not = base2<br />'; } if($base3 === $base){ echo 'base3 === base<br />'; }else{ echo 'base3 is not = base<br />'; }
これの出力結果が
base is not = base2
base3 is not = base2
base3 is not = base
なんとGDライブラリに一度格納された画像の透過は壊れてしまうらしい。。orz
なんとかならないものか。。