开发者

Output raw image from Imagick image in PHP

I'm using Imagick lib to do some modifications to original image. Then I'd like to output it directly to browser without saving. Is there a way to do that?

I tried to use Imagick::writeImage('STDOUT') (empty output) and 'php:开发者_Go百科//stdout' with error "Unable to write to file".

Any ideas? :)


You just need to echo your imagick object:

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


If you're using HHVM it'll throw a fatal exception if you just try and echo the Imagick object so you'll need to call getimageblob();

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


I believe what Schneck meant is:

header('Content-Type: '.$mime_type);
$fp = fopen('php://stdout', 'w+');
$image->writeImageFile($fp);
fclose($fp);

This may cause problems, especially in multipage files, so you should probably use:

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;

This is tested and working.

I realize this is an old question. The reason I'm posting this is that if you want to write a multipage PDF, this is the solution, as Nabab's solution only works for single images.

You can also use (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;

This way seems to be faster if your PHP version supports it.

Before you downvote, the reason I added this as an answer and not a comment is I don't have sufficient reputation to comment. Hope that is alright. Just wanted to get this out there in case anyone needed it.


Have you tried Imagick::writeImageFile("php://stdout") (untested)?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜