Я использую 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)?