Есть ли в анимированных Gif-файлах встроенный GIFGIF?


В настоящее время я переписываю существующий инструмент на PHP, который другой человек запустил для оптимизации изображений, для изображений gif я конвертирую в png, а затем оптимизирую png file. Для animated gifs я буду запускать программу под названием Gifsicle, которая может оптимизировать анимированные gif изображения.

В некоторых существующих кодовых базах другой парень идентифицировал анимированные gif-изображения с расширением файла gifgif как вы можете видеть в приведенных ниже фрагментах, они содержат весь код, который ссылается на это gifgif.

У меня есть поиск в Google, и я нигде не могу найти упоминание о файле gifgif, кроме того, я никогда в своей жизни не слышал о нем.

Может ли кто-нибудь помочь мне выяснить, существует ли фактическое расширение gifgif? Возможно ли, что это что-то встроенное в файлы animated gif?

Код...

$types = array("gif", "png", "gifgif", "jpg", "jpeg", "bmp");

И

if (substr($type, 0, 6) === "gifgif") 
{
    $type = "gifgif";
}

И

case "gifgif":
    $dest_file .= ".gif";
    $cmd = "/usr/bin/gifsicle -O2 $src_file > $dest_file";
    exec($cmd, $return, $error);
Author: CodeDevelopr, 2012-01-11

2 answers

Это не стандартное расширение, и код, который вы показываете, похоже, заботится только о расширениях файлов.

Предположительно разработчик используемой вами системы разработал соглашение, и оно уникально для этой системы.

 2
Author: Quentin, 2012-01-11 13:16:41

gifgif не является допустимым расширением - и, безусловно, не является допустимым способом проверить, является ли файл анимированным gif-файлом. Чтобы проверить, является ли файл анимированным gif, вам необходимо фактически проанализировать содержимое файла и проверить заголовки кадров. Эта функция сделает это просто:

<?php
function is_ani($filename) {
    return (bool)preg_match('#(\x00\x21\xF9\x04.{4}\x00\x2C.*){2,}#s', file_get_contents($filename));
}
?>

P.S. Это не моя функция, а заимствованная из http://php.net/manual/en/function.imagecreatefromgif.php В том же посте приведена другая версия. Эта версия функция считывает файл по частям и проверяет каждый отдельный фрагмент, однако этот подход будет неверным, поскольку заголовок может оказаться разделенным между двумя фрагментами.

 1
Author: Aleks G, 2012-01-11 13:20:57