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