2011-09-30 6 views
6

Ho molte immagini JPEG che voglio convertire in immagini PNG usando PHP. I file JPEG verranno caricati dai client, quindi non posso fidarmi di loro per assicurarmi che siano nel formato giusto.Usa PHP per convertire i JPEG in PNG trasparente

Voglio anche rendere i loro sfondi bianchi trasparenti.

Il PHP ha alcune funzioni che posso utilizzare per ottenere questo risultato?

risposta

8

Dopo alcuni giorni di cercare soluzioni diverse e fare qualche ricerca, questo è quello che ho trovato lavorato per me .

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

Il imagealphablending($image, true); è importante.

Utilizzando imagesavealpha($f, true); come accennato in una precedente risposta sicuramente non funziona e sembra impedire in realtà di fare lo sfondo trasparente ...

Per scrivere l'immagine trasparente con le intestazioni corrette.

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

Maggiori dettagli here

+6

Assumendo questo funzionerà, mente che JPG è un formato lossy. Ciò significa che i colori possono essere un po 'spenti, soprattutto attorno ai bordi e in luoghi in cui il colore cambia dal bianco a un altro colore. Cercando semplicemente il bianco, probabilmente non troverai tutti i pixel che desideri siano trasparenti. – GolezTrol

+1

Solo per completare questa risposta: usa 'imagesavealpha ($ f, true);' per assicurare che il canale alfa sia salvato e 'imagepng ($ f, '/path/to/save/file.png');' per salvare come PNG. – megaflop

+0

Maggiori dettagli [qui] (http://www.php.net/manual/en/ref.image.php). – awm

-3

ho trovato questa soluzione al 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

Non hai risposto alla domanda di trasparenza. – megaflop

0

questo ha funzionato per me:

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