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

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

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

Любые идеи?:)

Ответы

Ответ 1

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

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

Ответ 2

Я считаю, что 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 поддерживает его.

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

Ответ 3

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

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

Ответ 4

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