2011-02-08 18 views
14

私は元のイメージにいくつかの変更を行うためにImagickのlibを使用しています。それから私は保存せずに直接ブラウザに出力したいと思います。それを行う方法はありますか?PHPのImagickイメージから生のイメージを出力します

Imagick::writeImage('STDOUT')(空の出力)と「php:// stdout」を「ファイルに書き込めません」というエラーで使用しようとしました。

アイデア? :)

答えて

23

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

例#1に示すように:http://es2.php.net/manual/en/imagick.examples-1.php –

+6

私は 'header( 'Content-Type:image /'.$ img- > getImageFormat()); ' - それ以外の場合は非常にいい:) – gnud

+0

ええ、それは良いです:) – Nabab

-1

Imagick::writeImageFile("php://stdout")(未テスト)を試しましたか?あなたは自分のImagickオブジェクトをエコーする必要が

+0

これは 'writeImage()'になり、動作しません! – Benjamin

2

私は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; 

これはテストされ、動作します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の前に、答えとしてコメントを追加したのは、私がコメントするには十分な評判がないからです。それはいいですね。誰かがそれを必要とする場合に備えて、これをそこに持っていきたいだけでした。

1

HHVMを使用している場合、Imagickオブジェクトをエコーし​​てgetimageblob()を呼び出す必要がある場合は、致命的な例外がスローされます。

$imagick = new Imagick('my-image.jpg'); 
header('Content-Type: image/' . $imagick->getImageFormat()); 
echo $imagick->getimageblob(); 
関連する問題