在PHP中从Imagick图像输出原始图像

在PHP中从Imagick图像输出原始图像,php,stdout,imagick,Php,Stdout,Imagick,我正在使用Imagick库对原始图像进行一些修改。然后我想直接将它输出到浏览器而不保存。有办法吗 我尝试使用Imagick::writeImage('STDOUT')(空输出)和'php://stdout'错误为“无法写入文件” 有什么想法吗?:) 您是否尝试过Imagick::writeImageFile(“php://stdout“(未测试)?您只需回显您的imagick对象: $img = new Imagick($file); header('Content-Type: image/'.

我正在使用Imagick库对原始图像进行一些修改。然后我想直接将它输出到浏览器而不保存。有办法吗

我尝试使用
Imagick::writeImage('STDOUT')
(空输出)和'php://stdout'错误为“无法写入文件”


有什么想法吗?:)

您是否尝试过
Imagick::writeImageFile(“php://stdout“
(未测试)?

您只需回显您的imagick对象:

$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+):

如果您的PHP版本支持这种方法,那么这种方法似乎会更快


在你投否决票之前,我之所以加上这个作为回答而不是评论,是因为我没有足够的声誉来评论。希望没问题。只是想在有人需要的情况下发布它。

如果您正在使用HHVM,如果您只是尝试回显Imagick对象,它将抛出一个致命的异常,因此您需要调用getimageblob()


如示例#1所示:我使用
标题('Content-Type:image/'。$img->getImageFormat())--但在其他方面非常好:)如果出于某种原因,您不想回显图像,可以通过调用
$img->\uuu toString()
$fp = fopen('php://temp', 'r+');
$image->writeimagesfile($fp);
rewind($fp);
$out = stream_get_contents($fp);
header('Content-Length: '.strlen($out));
fclose($fp);
echo $out;
$imagick = new Imagick('my-image.jpg');
header('Content-Type: image/' . $imagick->getImageFormat());
echo $imagick->getimageblob();