Выходное изображение из образа Imagick в PHP

Я использую Imagick lib для внесения некоторых изменений в исходное изображение. Затем я хотел бы выводить его непосредственно в браузер без сохранения. Есть ли способ сделать это?

Я попытался использовать Imagick::writeImage('STDOUT') (пустой вывод) и 'php: // stdout' с ошибкой «Невозможно записать в файл».

Есть идеи? 🙂

Вам просто нужно повторить свой воображаемый объект:

 $img = new Imagick($file); header('Content-Type: image/'.$img->getImageFormat()); echo $img; 

Я считаю, что Schneck означает:

 header('Content-Type: '.$mime_type); $fp = fopen('php://stdout', 'w+'); $image->writeImageFile($fp); fclose($fp); 

Это может вызвать проблемы, особенно в многостраничных файлах, поэтому вы, вероятно, должны использовать:

 ob_start(); $fp = fopen('php://output', 'w+'); $image->writeimagefile($fp); // or writeImagesFile for multipage PDF fclose($fp); $out = ob_get_clean(); header('Content-Length: '.strlen($out)); echo $out; 

Это проверено и работает.

Я понимаю, что это старый вопрос. Причина, по которой я публикую это, заключается в том, что если вы хотите написать многостраничный PDF-файл, это решение, так как решение Nabab работает только для одиночных изображений.

Вы также можете использовать (PHP 5.1.0+):

 $fp = fopen('php://temp', 'r+'); $image->writeimagesfile($fp); rewind($fp); $out = stream_get_contents($fp); header('Content-Length: '.strlen($out)); fclose($fp); echo $out; 

Этот способ кажется более быстрым, если ваша версия PHP поддерживает его.

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

Если вы используете HHVM, он будет генерировать фатальное исключение, если вы просто попробуете эхо объекта Imagick, поэтому вам нужно будет вызвать getimageblob ();

 $imagick = new Imagick('my-image.jpg'); header('Content-Type: image/' . $imagick->getImageFormat()); echo $imagick->getimageblob(); 

Вы пробовали Imagick::writeImageFile("php://stdout") (untested)?