В настоящее время, если пользователь 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
Любая идея, как я могу сделать это или что-то подобное, чтобы получить результат, который я получил?
Я предлагаю вам следовать этому подходу:
// 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-адресах, ни одна из которых не работала!