2009-12-27 3 views
6

Имея только действительный ресурс изображения GD, можно узнать тип исходного изображения?PHP/GD - Поиск изображения Тип ресурса

Например:

$image = ImageCreateFromPNG('http://sstatic.net/so/img/logo.png'); 

Могу ли я получить исходный тип изображения (PNG), имеющие только переменные изображений $ доступны?

+0

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

ответ

4

Я так не думаю, нет. $ image находится в формате внутреннего изображения GD после того, как он был обработан функцией ImageCreate().

+0

Спасибо Pekka. К сожалению, я тоже так не думаю, но я подожду еще немного, чтобы узнать, может ли кто-нибудь придумать способ сделать это. –

+0

Что такое фон? Может быть, есть другая проблема в вашей проблеме? –

+1

Это правильно - изображение находится во внутреннем формате GD, чтобы его можно было выводить в любой доступный формат. Единственный способ определить формат - использовать исходный файл изображения. –

9

Я не уверен, если это может быть сделано из переменной изображения $, но, чтобы получить MimeType, как правило, можно использовать любой из четырех:

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

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

// with Exif (returns image constant value) 
return exif_imagetype($path) 

// deprecated 
return mime_content_type($path); 

Из вашего описания вопроса я принимаю вы хотите использовать удаленный файл, так что вы могли бы сделать что-то вроде этого, чтобы сделать эту работу:

$tmpfname = tempnam("/tmp", "IMG_"); // use any path writable for you 
$imageCopy = file_get_contents('http://www.example.com/image.png'); 
file_put_contents($tmpfname, $imageCopy); 
$mimetype = // call any of the above functions on $tmpfname; 
unlink($tmpfname); 

Примечание: если функция MimeType вы будете использовать поддерживает удаленные файлы, использовать его непосредственно, вместо того, чтобы создать копию файла первая

Если вам нужен MimeType, чтобы определить, какая функция imagecreatefrom использовать, почему бы не сначала загрузить файл в виде строки, а затем разрешить GD, например.

// returns GD image resource of false 
$imageString = file_get_contents('http://www.example.com/image.png'); 
if($imageString !== FALSE) { 
    $image = imagecreatefromstring($imageString); 
} 
+0

Нет, это не то, что я хочу, так как у меня нет доступа к пути. = \ –

+0

Но у вас есть доступ к * некоторым * дорожкам, не так ли? – Gordon

+0

Нет, он этого не делает, только для самого открытого ресурса изображения. –

0

Вы можете просто попытаться загрузить ресурс с Png погрузчиком, а если это не изображение PNG, она не будет выполнена, возвращая FALSE. Затем просто повторяйте с каждым из допустимых форматов, которые вы хотите иметь, и если все сбой, то отобразите ошибку.

+0

Открытие ресурса не проблема ... –

Смежные вопросы