ImageCreateFromString и getimagesize в PHP

В настоящее время, если пользователь POST / загружает фотографию в мой PHP-скрипт, я начинаю с некоторого кода, подобного этому

getimagesize($_FILES['picture1']['tmp_name']); 

Затем я делаю БОЛЬШЕ больше материала, но я также пытаюсь получить фотографию из URL-адреса и обрабатывать его другим кодом, если смогу. Так что я хочу знать, я использую что-то вроде этого

 $image = ImageCreateFromString(file_get_contents($url)); 

Смогу ли я затем запустить getimagesize () в моей переменной $ image?



ОБНОВИТЬ

Я просто попробовал это …

 $url = 'http://img.ruphp.com/image-processing/twitter_logo_header.png'; $image = imagecreatefromstring(file_get_contents($url)); $imageinfo = getimagesize($image); print_r($imageinfo); 

Но он не работал, дал это.

 Warning: getimagesize(Resource id #4) [function.getimagesize]: failed to open stream: No such file or directory in 

Любая идея, как я могу сделать это или что-то подобное, чтобы получить результат, который я получил?

Solutions Collecting From Web of "ImageCreateFromString и getimagesize в PHP"

Я предлагаю вам следовать этому подходу:

 // if you need the image type $type = exif_imagetype($url); // if you need the image mime type $type = image_type_to_mime_type(exif_imagetype($url)); // if you need the image extension associated with the mime type $type = image_type_to_extension(exif_imagetype($url)); // if you don't care about the image type ignore all the above code $image = ImageCreateFromString(file_get_contents($url)); echo ImageSX($image); // width echo ImageSY($image); // height 

Использование exif_imagetype() намного быстрее, чем getimagesize() , то же самое относится к ImageSX() / ImageSY() , плюс они не возвращают массивы и также могут возвращать правильное измерение изображения после того, как изображение было изменено или обрезано, например ,

Кроме того, использование getimagesize() в URL-адресах не является хорошим, потому что оно будет потреблять гораздо большую пропускную способность, чем альтернативный exif_imagetype() , из руководства PHP :

Когда будет найдена правильная сигнатура, будет возвращено соответствующее значение константы, иначе возвращаемое значение будет FALSE. Возвращаемое значение – это то же значение, которое getimagesize() возвращает в индексе 2, но exif_imagetype() выполняется намного быстрее.

Это потому, что exif_imagetype() будет читать только первые несколько байтов данных.

Если у вас уже есть ресурс изображения, вы получите размер, используя функции imagesx и imagesy.

getimagesize может использоваться с HTTP.

Имя файла. Он может ссылаться на локальный файл или (при разрешении конфигурации) удаленный файл с использованием одного из поддерживаемых потоков .

таким образом

 $info = getimagesize($url); $image = ImageCreateFromString(file_get_contents($url)); 

все должно быть в порядке.

Не уверен, что это поможет, но я столкнулся с подобной проблемой, и выяснилось, что брандмауэр, контролируемый моим хостом, блокировал исходящее http-соединение с моего сервера.

Они изменили настройки брандмауэра. Затем мой код работал.

BTW: Я думал, что это могло быть проблемой, когда я пытался file_get_contents () на нескольких URL-адресах, ни одна из которых не работала!