PHP / GD – поиск типа ресурса изображения

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

Например:

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

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

Solutions Collecting From Web of "PHP / GD – поиск типа ресурса изображения"

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

Я не уверен, что это можно сделать из переменной $ image, но чтобы получить 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); } 

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