2011-09-30 21 views
6

Tengo muchas imágenes JPEG que quiero convertir a imágenes PNG usando PHP. Los archivos JPEG serán cargados por los clientes, por lo que no puedo confiar en ellos para asegurarme de que estén en el formato correcto.Usar PHP para convertir archivos JPEG a PNG transparente

También quiero que sus fondos blancos sean transparentes.

¿Tiene PHP alguna función que pueda usar para lograr esto?

Respuesta

8

Después de unos días de intentar diferentes soluciones y hacer más investigación, esto es lo que he encontrado trabajado para mí .

$image = imagecreatefromjpeg('image.jpg'); 
imagealphablending($image, true); 
$transparentcolour = imagecolorallocate($image, 255,255,255); 
imagecolortransparent($image, $transparentcolour) 

El imagealphablending($image, true); es importante.

Usando imagesavealpha($f, true); como se ha mencionado en una respuesta anterior definitivamente no funciona y parece que le impide realmente de hacer el fondo transparente ...

A la salida de la imagen transparente con las cabeceras correctas.

<?php 
    header('Content-Type: image/png'); 
    imagepng($image, null, 1); 
?> 
6
$f = imagecreatefromjpeg('path.jpg'); 
$white = imagecolorallocate($f, 255,255,255); 
imagecolortransparent($f, $white); 

Más detalles here

+6

Suponiendo que esto funcionará, cuenta que JPG es un formato con pérdida. Eso significa que los colores pueden estar un poco descoloridos, especialmente alrededor de los bordes y en lugares donde el color cambia de blanco a otro color. Si busca simplemente blanco, probablemente no encuentre todos los píxeles que desea que sean transparentes. – GolezTrol

+1

Solo para completar esta respuesta: use 'imagesavealpha ($ f, true);' para asegurarse de que se guarde el canal alfa y 'imagepng ($ f, '/path/to/save/file.png');' para guardar como PNG. – megaflop

+0

Más detalles [aquí] (http://www.php.net/manual/en/ref.image.php). – awm

-3

he encontrado esta solución a Convert jpg image to gif, png & bmp format using PHP

$imageObject = imagecreatefromjpeg($imageFile); 
imagegif($imageObject, $imageFile . '.gif'); 
imagepng($imageObject, $imageFile . '.png'); 
imagewbmp($imageObject, $imageFile . '.bmp'); 
+0

No ha respondido la pregunta de transparencia. – megaflop

0

Esto funcionó para mí:

$image = imagecreatefromjpeg("image.jpg"); 
imagealphablending($image, true); 
imagepng($image, "image.png");