我正在使用Imagick lib对原始图像进行一些修改。然后我想直接将它输出到浏览器而不保存。有没有办法做到这一点?
我尝试使用Imagick::writeImage('STDOUT')
(空输出)和'php:// stdout',错误“无法写入文件”。
有什么想法吗? :)
答案 0 :(得分:25)
你只需要回应你的想象对象:
$img = new Imagick($file);
header('Content-Type: image/'.$img->getImageFormat());
echo $img;
答案 1 :(得分:3)
我相信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版本支持它,这种方式似乎更快。
在你投票之前,我之所以添加这个作为答案而不是评论的原因是我没有足够的声誉来发表评论。希望没关系。只是想把它拿到那里以防万一有人需要它。
答案 2 :(得分:3)
如果您正在使用HHVM,如果您尝试回显Imagick对象,则会抛出致命异常,因此您需要调用getimageblob();
$imagick = new Imagick('my-image.jpg');
header('Content-Type: image/' . $imagick->getImageFormat());
echo $imagick->getimageblob();
答案 3 :(得分:-1)
您是否尝试过Imagick::writeImageFile("php://stdout")
(未经测试)?