2011-02-08 19 views
14

Estoy usando Imagick lib para hacer algunas modificaciones a la imagen original. Entonces me gustaría enviarlo directamente al navegador sin guardarlo. ¿Hay una manera de hacer eso?Salida de imagen sin formato desde la imagen de Imagick en PHP

Intenté usar Imagick::writeImage('STDOUT') (salida vacía) y 'php: // stdout' con el error "No se puede escribir en el archivo".

¿Alguna idea? :)

Respuesta

23

sólo tiene que repetir su objeto imagick:

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

Como se muestra en el ejemplo n. ° 1: http://es2.php.net/manual/en/imagick.examples-1.php –

+6

Iría con 'header ('Content-Type: image /'.$ img- > getImageFormat()); '- pero por lo demás muy agradable :) – gnud

+0

Sí, eso es mejor :) – Nabab

-1

¿Has probado Imagick::writeImageFile("php://stdout") (no probado)?

+0

Eso sería 'writeImage()', ¡y eso no funciona! – Benjamin

2

Creo que lo Schneck quiere decir es:

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

Este puede causar problemas, sobre todo en los archivos de varias páginas, por lo que probablemente debería uso:

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; 

Esto está probado y funciona En g.

Me doy cuenta de que esta es una vieja pregunta. La razón por la que estoy publicando esto es que si quieres escribir un PDF de varias páginas, esta es la solución, ya que la solución de Nabab solo funciona para imágenes individuales.

También puede utilizar (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; 

De esta manera parece ser más rápida si su versión de PHP lo soporta.

Antes de declinar, la razón por la que agregué esto como respuesta y no como comentario es que no tengo suficiente reputación para comentar. Espero que esté bien. Solo quería sacar esto en caso de que alguien lo necesitara.

1

Si está utilizando HHVM arrojará una excepción fatal si solo intenta hacer eco del objeto Imagick por lo que tendrá que llamar a getimageblob();

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