То, что делает ваш код, более или менее выглядит следующим образом:
// Load the PNG file from disk into memory
$im2 = imagecreatefrompng($image)
$im2
теперь resource
, ссылаясь на изображение. Когда-то в памяти, это не PNG или JPEG; это необработанные, несжатые данные. «Формат» изображения указывает, как эти необработанные данные упаковываются и форматируются; на данный момент не имеет такого форматирования. Это просто данные в памяти.
// Some code which works with the image in memory, adding your watermark?
imagecopy() and more code here
// Tell the browser that we're output a JPG
header("Content-Type: image/jpeg");
Если вы запрашиваете jpg (то есть http://host.com/image.jpg), тогда сервер позаботится о том, чтобы вы написали этот заголовок для вас. Если вы создаете JPG на лету через PHP, вы должны вручную вывести заголовок. В противном случае, PHP предполагает, что вы пишете HTML, и выводит соответствующие заголовки для вас, как только напишите что-нибудь в стандартный вывод, либо через echo
, либо просто используя текст / пробел вне тегов <?php ?>
.
// compress as a jpeg, and send to browser
imagejpeg($im2,'',50);
imagejpeg
берет необработанное изображение, сжимает его в формате jpg и записывает в файл (если вы задаете ему имя файла) или в stdout (который отправляет его в браузер). Технически для вывода в браузер 2-й аргумент должен быть null
, а не ''
. Последний параметр, 50, определяет качество JPEG в процентах. 100 - высокое качество, 0 - низкое качество.