私は元のイメージにいくつかの変更を行うためにImagickのlibを使用しています。それから私は保存せずに直接ブラウザに出力したいと思います。それを行う方法はありますか?PHPのImagickイメージから生のイメージを出力します
Imagick::writeImage('STDOUT')
(空の出力)と「php:// stdout」を「ファイルに書き込めません」というエラーで使用しようとしました。
アイデア? :)
私は元のイメージにいくつかの変更を行うためにImagickのlibを使用しています。それから私は保存せずに直接ブラウザに出力したいと思います。それを行う方法はありますか?PHPのImagickイメージから生のイメージを出力します
Imagick::writeImage('STDOUT')
(空の出力)と「php:// stdout」を「ファイルに書き込めません」というエラーで使用しようとしました。
アイデア? :)
:
$img = new Imagick($file);
header('Content-Type: image/'.$img->getImageFormat());
echo $img;
Imagick::writeImageFile("php://stdout")
(未テスト)を試しましたか?あなたは自分のImagickオブジェクトをエコーする必要が
これは 'writeImage()'になり、動作しません! – Benjamin
私は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の前に、答えとしてコメントを追加したのは、私がコメントするには十分な評判がないからです。それはいいですね。誰かがそれを必要とする場合に備えて、これをそこに持っていきたいだけでした。
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 –
私は 'header( 'Content-Type:image /'.$ img- > getImageFormat()); ' - それ以外の場合は非常にいい:) – gnud
ええ、それは良いです:) – Nabab