2011-02-08 65 views
14

Tôi đang sử dụng Imagick lib để thực hiện một số sửa đổi đối với hình ảnh gốc. Sau đó, tôi muốn xuất trực tiếp lên trình duyệt mà không lưu. Có cách nào làm được việc này không?Xuất hình ảnh thô từ hình ảnh Imagick trong PHP

Tôi đã cố gắng sử dụng Imagick::writeImage('STDOUT') (sản lượng trống) và 'php: // stdout' có lỗi "Không thể ghi vào tệp".

Bất kỳ ý tưởng nào? :)

Trả lời

23

Bạn chỉ cần để echo đối tượng imagick của bạn:

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

Như minh họa trong ví dụ # 1: http://es2.php.net/manual/en/imagick.examples-1.php –

+6

Tôi muốn đi với 'header ('Content-Type: image /'.$ img- > getImageFormat()); '- nhưng nếu không thì rất tốt :) – gnud

+0

Yeah, tốt hơn :) – Nabab

-1

Bạn đã thử Imagick::writeImageFile("php://stdout") (chưa được kiểm tra) chưa?

+0

Đó sẽ là 'writeImage()' và điều đó không hoạt động! – Benjamin

2

Tôi tin rằng những gì Schneck nghĩa là:

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

này thể nguyên nhân vấn đề, đặc biệt là trong các tập tin nhiều trang, vì vậy bạn nên có lẽ sử dụng:

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; 

Điều này được kiểm tra và hoạt động ing.

Tôi nhận thấy đây là một câu hỏi cũ. Lý do tôi đăng bài này là nếu bạn muốn viết một tệp PDF nhiều trang, đây là giải pháp, vì giải pháp của Nabab chỉ hoạt động với các hình ảnh đơn lẻ.

Bạn cũng có thể sử dụng (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; 

Bằng cách này có vẻ là nhanh hơn nếu phiên bản PHP của bạn hỗ trợ nó.

Trước khi bạn downvote, lý do tôi thêm này như là một câu trả lời và không phải là một bình luận là tôi không có đủ danh tiếng để bình luận. Hy vọng đó là alright. Chỉ muốn để có được điều này ra có trong trường hợp bất cứ ai cần nó.

1

Nếu bạn đang sử dụng HHVM, nó sẽ ném một ngoại lệ chết người nếu bạn chỉ cố gắng và lặp lại đối tượng Imagick, do đó bạn sẽ cần gọi hàm getimageblob();

$imagick = new Imagick('my-image.jpg'); 
header('Content-Type: image/' . $imagick->getImageFormat()); 
echo $imagick->getimageblob(); 
Các vấn đề liên quan