работа с изображением из imagecreatefromstring PHP - PullRequest
1 голос
/ 02 августа 2011

Итак, у меня есть приложение для iphone, которое загружает изображение на мой веб-сервер, и я осмотрелся, и люди, кажется, делают что-то вроде

$data = file_get_contents($_FILES['file']['tmp_name']);
$image = imagecreatefromstring($data);
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

Я посмотрел документацию по php, но я все еще не понимаю, что делает header (); это преобразовывает изображение в любой формат, который я хочу?

А для imagepng (), куда выводится изображение? объем памяти? Вот почему мне нужно imagedestroy ()?

и куда бы я положил

move_uploaded_file()

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 02 августа 2011

Этот код предназначен для возврата в качестве выходного изображения - вы можете использовать его как действительный src для тега изображения. То есть вы могли бы сделать это:

<img src="thatfile.php?something=1" />

Заголовки сообщают браузеру, что данные, которые сервер отправляет, являются изображением (в частности, PNG-изображением).

В вашем примере кода файл фактически никогда нигде не записывается: данные остаются в памяти до тех пор, пока сценарий не завершится, а затем просто «забываются». imagedestroy освобождает память и является хорошей практикой, но на самом деле в этом нет необходимости, так как память будет собираться после завершения запроса. Если вы хотите сохранить изображение в файле, вам нужно использовать одну из связанных функций, таких как imagepng: http://www.php.net/manual/en/function.imagepng.php. Единственная разница между записью файла или нет в вашем примере кода - это отсутствие второго аргумента для imagepng - вторым аргументом будет требуемый путь к файлу.

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

1 голос
/ 02 августа 2011

Этот конкретный пример получает изображение, загруженное через POST из массива $_FILES, и просто выводит его обратно в браузер. header здесь, чтобы сообщить браузеру, что следующее содержимое является изображением PNG.

Поскольку вы создаете изображение из строки, оно не имеет «расширения». Это просто изображение resource на данный момент. Вы можете создать из него фактический файл, используя imagepng, imagejpeg или любым другим способом, чтобы сохранить ресурс изображения в файл. На этом этапе вы сами решаете расширение (и имя файла).

например:.

imagepng($image, 'path/to/file.png');

и куда бы я положил move_uploaded_file()?

Вы не будете, так как у вас нет загруженного файла, только строка.

0 голосов
/ 02 августа 2011

Заголовок предназначен исключительно для того, чтобы сервер сообщал браузеру: «О, эй, это изображение в формате png, пожалуйста, сделайте это так»

imagepng кодирует его в формат png и «печатает» на выходе

imagedestroy освобождает память, занятую ресурсом изображения.

Если вам нужно форсировать расширение, вы можете использовать mod_rewrite

Вот несколько примеров строк из моего .htaccess:

RewriteEngine on
RewriteRule images/000000/00FF00/newmyinfo.jpg images/newmyinfo.php?bgcolor=000000&color=00ff00  [L]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...