2011-05-23 31 views
5

Tengo un script php para crear una miniatura de pdf de la siguiente manera;php Imagemagick jpg fondo negro

<?php 
$file ="test.pdf"; 
$im = new imagick(realpath($file).'[0]'); 
$im->setImageFormat("jpg"); 
$im->resizeImage(200,200,1,0); 
// start buffering 
ob_start(); 
$thumbnail = $im->getImageBlob(); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />"; 
?> 

Pero el jpg resultante tiene fondo negro en lugar de blanco ... ¿Cómo puedo solucionar esto?

+0

Una copia o un enlace al archivo jpg en cuestión sería útil y también una captura de pantalla de la salida resultante. –

+0

Laurence Burke: aquí está la imagen resultante http://i.imgur.com/jyQC6.jpg –

+0

¿Cuál es tu estilo de css y podrías vincular el jpg original? –

Respuesta

1

I resuelto por;

$im = new imagick(realpath($file).'[0]'); 
$im->setCompression(Imagick::COMPRESSION_JPEG); 
$im->setCompressionQuality(100); 
$im->setImageFormat("jpeg"); 
$im->writeImage("imagename.jpg"); 
+0

'setCompressionQuality' no funciona realmente en esta situación. Para cambiar la calidad, use 'setImageCompressionQuality' – vatavale

1

Si su versión de Imagick no está actualizada, el setImageBackgroundColor puede estar equivocado.

Intercambio de la siguiente línea

$im->setImageBackgroundColor("red"); 

a esta (versión Imagick> = 2.1.0)

$im->setBackgroundColor(new ImagickPixel("red")); 

o (versión Imagick < 2.1.0)

$im->setBackgroundColor("red"); 
+0

hice algunos cambios en mi pregunta ... eche un vistazo ... y su sugerencia no funciona ... –

+0

@blasteralfred ¿Podría proporcionar acceso a una copia de su PDF porque creo que el problema estar relacionado con eso, en lugar del código que proporcionó anteriormente. El código actualizado funciona sin problemas con el PDF que tengo. – carlgarner

1

Simplemente añadiendo esto impide que el JPG que se crea con un fondo negro

-alpha off 
+0

¿Dónde?Por favor, da una respuesta en el formato de la pregunta. Entonces, en este caso, php válido –

1

cambio de este código $im->setimageformat("jpg"); a este código $im->setimageformat("png"); si se enfrentan a un problema de color de fondo.

1

Ninguna de las respuestas enviadas anteriormente trabajó para mí, sin embargo hizo el siguiente:

$image = new Imagick; 

$image->setResolution(300, 300); 

$image->readImage("${originalPath}[0]"); 

$image->setImageFormat('jpg'); 

$image->scaleImage(500, 500, true); 

$image->setImageAlphaChannel(Imagick::VIRTUALPIXELMETHOD_WHITE); 

Como estoy usando el marco laravel entonces tomo la imagen convertida y lo almacenan utilizando Laravels sistema de archivos.

Storage::put($storePath, $image->getImageBlob()); 

Actualización: Así que OS Cambiado recientemente y que ello trabajó anteriormente en mi máquina de Ubuntu en mi Mac ciertas imágenes seguían saliendo negro.

que tenía que cambiar el guión para el siguiente:

$image = new Imagick; 

$image->setResolution(300, 300); 

$image->setBackgroundColor('white'); 

$image->readImage("${originalPath}[0]"); 

$image->setImageFormat('jpg'); 

$image->scaleImage(500, 500, true); 

$image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN); 

$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); 

parece importante para establecer el color de fondo antes de leer en la imagen. También aplanar las posibles capas y eliminar el canal alfa. Siento que probé ALPHACHANNEL_REMOVE en mi máquina Ubuntu y no funcionó, así que espero que entre estas respuestas los lectores encuentren algo que les sirva.

Cuestiones relacionadas