gifファイルがアニメーションgifか判定するクラス
アニメgifか判定のクラス、晒そうと思います。
動かないことに定評があるラブ☆コン(ピュータ)のコードですが、これは動きます。
<?php // mana @20090328 class IfAnimationGif{ var $path; function __construct($path){ $this->path = $path; } function judge(){ $imgcnt = 0; $fp = fopen($this->path,"rb"); @fread($fp,4); $c = @fread($fp,1); if(ord($c) !== 0x39) { // GIF89aである(アニメーションかも) return false; } while(!feof($fp)){ do{ $c = fread($fp,1); }while(ord($c) !== 0x21 && !feof($fp)); // 拡張ブロック開始まで送る if(feof($fp)){ break; } $c2 = fread($fp,2); if(bin2hex($c2) === "f904"){ // Graphic Control Extension固定値 $imgcnt++; } if(feof($fp)){ break; } } if($imgcnt > 1){ return true; } else { return false; } } }/* $path = gifファイルのファイルパス $anigif = new IfAnimationGif($path); echo var_dump($anigif->judge()); // trueだったら、gifアニメ。 */ ?>
・ひとりごと
bin2hexという関数、ぐぐったら出てきました。
その名のとおり、バイナリ16進数を文字列16進数にするものです。
if(bin2hex($c2) === "f904")
だと動くのですが
if(ord($c2) === 0xf904)
ってやったら、動かなくて・・・それでかなり時間くいました。。