おひさしぶりです。
タイトルの通り、チェック対象のファイルがアニメーションgifかそうじゃないかのチェックプログラムを・・・
で、とほほさんのGIFフォーマットの詳細を参考にしてみました。
/**
* アニメーションGIFかチェック
*
* @params string $img_file 画像ファイル(画像ファイルまでのPATH付き)
* @return bool true:アニメーションGIF false:それ以外
*/
function checkAnimationGif($img_file) {
if (!file_exists($img_file)) {
// ファイルが無い
return false;
}
if (!($fp = fopen($img_file, "rb"))) return false;
$head = fread($fp, 6);
if (!preg_match("/^GIF89a/", $head)) {
// GIF89a 以外
return false;
}
// カウント初期化
$gce_cnt = 0;
while (!feof($fp)) {
if (bin2hex(fread($fp, 1)) != "21") continue;
switch (bin2hex(fread($fp, 2))) {
/*
// 2014-11-06 削除
case "ff0b": // Application Extension
fclose($fp);
return true;
break;
*/
case "f904": // Graphic Control Extension
$gce_cnt++;
if ($gce_cnt > 1) {
fclose($fp);
unset($gce_cnt);
return true;
}
break;
}
}
fclose($fp);
unset($gce_cnt);
return false;
}
多分これで、チェックできるはず・・・
追記:2014-11-06
adobeのフォトショップで作成されたgifでApplication Extensionが含まれる通常のgifが作成されていることがわかりましたので
上記のソースを修正しました。