Zopfli PHP extension で遊んでみた
インストール
yoya@sakura$ git clone https://code.google.com/p/zopfli/ yoya@sakura$ git clone git://github.com/kjdev/php-ext-zopfli.git yoya@sakura$ cd php-ext-zopfli/ yoya@sakura$ rmdir zopfli yoya@sakura$ ln -s ../zopfli zopfli yoya@sakura$ phpize yoya@sakura$ ./configure yoya@sakura$ make yoya@sakura$ sudo echo extension=zopfli.so > /etc/php5/conf.d/zopfli.ini yoya@sakura$
動作テスト
<?php $c = zopfli_compress($argv[1]); $u = gzuncompress($c); echo $u.PHP_EOL;
- 実行
yoya@sakura$ php zopfli_test.php ABCD ABCD %
圧縮効率
<?php $args =array_slice($argv, 1); foreach ($args as $arg) { $d = file_get_contents($arg); $d_len = strlen($d); $g = gzcompress($d, 9); $g_len = strlen($g); $z = zopfli_compress($d, 100); $z_len = strlen($z); echo "$arg:$g_len"; echo " gz:$g_len (". ((int)(1000*$g_len/$d_len)/10)."%)"; echo " zopfli:$z_len (".((int)(1000*$z_len/$d_len)/10)."%)"; echo PHP_EOL; }
- 実行
yoya@sakura$ php zopfli.php *.c bcut.c:948 gz:948 (48%) zopfli:942 (47.7%) btimes.c:233 gz:233 (64.3%) zopfli:231 (63.8%) ebcdic2asciib.c:564 gz:564 (34.6%) zopfli:461 (28.3%) fdmp.c:2570 gz:2570 (32.6%) zopfli:2518 (31.9%)
Zopfli は文字コードテーブルのようなパターンに圧縮が強く効くらしい。
SWF 再圧縮
- 試しに Bitmap の Zlib 部分を再圧縮してみた。
- http://openpear.org/package/IO_SWF/src/trunk/sample/swfzopfli.php (IO_SWF がないと動かないよ!)
- とある画像を目一杯使ってる某 SWF ファイルを変換。
yoya@sakura:~/svn/IO_SWF$ php sample/swfzopfli.php q.swf > t.swf yoya@sakura:~/svn/IO_SWF$ ls -l q.swf t.swf -rw-r--r-- 1 yoya develop 89690 2012-01-31 16:12 q.swf -rw-r--r-- 1 yoya develop 87137 2013-04-22 22:51 t.swf
思ったより減ってる。
以上、もう Flash Lite の SWF をバイト単位で削るとか旬過ぎてるよ pgr。と言われそうだけど、あえてメモを残しました。