Есть ли способ определить тип изображения по дескриптору GD? - PullRequest
0 голосов
/ 28 февраля 2012

Я пишу сценарий миниатюр, и из того, что я видел, миниатюры, как правило, выглядят лучше в том же формате, что и их источник.Однако скрипт может загружать изображения из Интернета, поэтому я не могу получить доступ к файлу дважды.Так есть ли способ получить тип файла, отличный от exif_imagetype и других функций, которые должны повторно открыть изображение?Я не хочу полагаться на расширение, поскольку оно, очевидно, может быть неправильным.

Я выполняю обработку миниатюр с помощью GD, поэтому что-то, что использует дескриптор, было бы идеально, но я также мог бы использовать файлсодержание.И да, я знаю, что GD обрабатывает справочные несжатые данные, но я не уверен, что они не помнят, из чего они распакованы.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012
function getImageExt($bytes)
{
    $hex_bytes = '';
    for ($i = 0; $i < strlen($bytes); $i++)
    {
        $hex_bytes .=  dechex(ord($bytes[$i]));
    }
    if (strncasecmp($hex_bytes,'FFD8',4) === 0) return 'jpg';
    if (strncasecmp($hex_bytes,'474946',6) === 0) return 'gif';
    if (strncasecmp($hex_bytes,'89504e47',8) === 0) return 'png';
    if (strncasecmp($hex_bytes,'424d',4) === 0) return 'bmp';
    return false;
}
0 голосов
/ 28 февраля 2012

Надеюсь, это поможет

// with GD
$img = getimagesize($path);
return $img['mime'];

// with FileInfo
$fi = new finfo(FILEINFO_MIME);
return $fi->file($path);
...