Ответ 1
Вам просто нужно повторить свой воображаемый объект:
$img = new Imagick($file);
header('Content-Type: image/'.$img->getImageFormat());
echo $img;
Я использую 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)?