Есть ли в анимированных Gif-файлах GIFGIF? - PullRequest
2 голосов
/ 11 января 2012

В настоящее время я переписываю существующий инструмент на 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);

Ответы [ 2 ]

2 голосов
/ 11 января 2012

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

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

1 голос
/ 11 января 2012

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 В том же посте приведена другая версия. Эта версия функции читает файл по частям и проверяет каждый отдельный чанк, однако этот подход не будет корректным, поскольку заголовок может в конечном итоге разделиться на два чанка.

...