我正在使用Imagick lib對原始圖像進行一些修改。然後我想直接輸出到瀏覽器而不保存。有沒有辦法做到這一點?從PHP的Imagick圖像輸出原始圖像
我試圖使用Imagick::writeImage('STDOUT')
(空輸出)和'php:// stdout',錯誤爲「無法寫入文件」。
任何想法? :)
我正在使用Imagick lib對原始圖像進行一些修改。然後我想直接輸出到瀏覽器而不保存。有沒有辦法做到這一點?從PHP的Imagick圖像輸出原始圖像
我試圖使用Imagick::writeImage('STDOUT')
(空輸出)和'php:// stdout',錯誤爲「無法寫入文件」。
任何想法? :)
你只需要回聲您imagick對象:
$img = new Imagick($file);
header('Content-Type: image/'.$img->getImageFormat());
echo $img;
你試過Imagick::writeImageFile("php://stdout")
(未經測試)?
這將是`writeImage()`,這是行不通的! – Benjamin 2012-08-19 22:54:26
我相信施內克的意思是:
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;
這是測試和工作ING。
我意識到這是一個老問題。我發佈這個的原因是,如果你想寫一個多頁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版本支持。
在你downvote之前,我把這個作爲答案而不是評論的原因是我沒有足夠的評論聲望。希望這是可以的。只是想在這種情況下得到這個以防萬一需要它。
如果你使用HHVM,它會拋出一個致命的異常,如果你只是嘗試回聲Imagick對象,所以你需要調用getimageblob();
$imagick = new Imagick('my-image.jpg');
header('Content-Type: image/' . $imagick->getImageFormat());
echo $imagick->getimageblob();
如示例1所示:http://es2.php.net/manual/en/imagick.examples-1.php – 2011-02-08 11:13:49