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 再圧縮

  • とある画像を目一杯使ってる某 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。と言われそうだけど、あえてメモを残しました。