2011-03-15 7 views
1

J'ai une image.png avec un fond blanc et un peu de transparence.Conversion d'un png en jpg avec GD2 .. problème de transparence

J'ai essayé de convertir l'image en jpg:

$data = file_get_contents('image.png'); 
$resource = imagecreatefromstring($data); 
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO 

Le problème est où le .png a obtenu le TRANSPARENCE maintenant jpg a une zone noire assez énorme. Voici comment jpg ressemble:

http://img861.imageshack.us/img861/20/context.jpg

Toute façon de résoudre le problème?

Edit1:

Comme suggéré par Abiusx J'ai essayé cela aussi:

$data = file_get_contents('image.png'); 
$resource = imagecreatefromstring($data); 
imagealphablending($data, false); 
imagesavealpha($data, true); 
imagejpeg($resource); 

Mais le résultat était le même. S'il vous plaît noter La source est l'image .png:

http://www.tipradar.com/wp-content/uploads/2010/02/Quicktime.png

Merci à Patrick commentaire: ici l'astuce: GD! Converting a png image to jpeg and making the alpha by default white and not black

+0

Je ne me souviens pas exactement, mais l'aide est fournie sur le site php (via des commentaires), je vais chercher et poster ici dans un moment. – AbiusX

+0

Oh, Jpeg ne supporte pas la transparence. Je n'ai pas lu ton titre. seuls PNG et GIf supportent la transparence. – AbiusX

+0

@abiusx: oui je ne veux pas garder traspareceny dans mon jpg, je veux juste que le jpg final sans ce patch noir –

Répondre

-1

Ceci est la fonction que j'utilise pour redimensionner une image PNG mais préserver la transparence, si elle ne aide , dites-moi d'extraire les pièces nécessaires pour vous:

function Resize($ImageFile,$OriginalFile) 
{ 
    $ext=basename($OriginalFile); 
    $ext=explode(".",$ext); 
    $ext=array_pop($ext); 
    $ext=strtolower($ext); 
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe") 
     $img=imagecreatefromjpeg($ImageFile); 
    elseif ($ext=="png") 
     $img=imagecreatefrompng($ImageFile); 
    elseif ($ext=="gif") 
     $img=imagecreatefromgif($ImageFile); 
    else 
     return false; 
    list($w,$h)=getimagesize($ImageFile); 
    $dstimg=imagecreatetruecolor(140,100); 

    imagealphablending($dstimg, false); 
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h); 
    imagesavealpha($dstimg, true); 
    imagepng($dstimg,$ImageFile); 
    return true; 
} 
+0

Man je ne veux pas imprimer un png d'un autre png .. J'ai besoin de convertir un png en .jpg sans avoir de patch noir dessus :) – dynamic

+0

vérifier les 4 dernières fonctions, principalement imagealphablending et imagecopyresampled et imagesavealpha – AbiusX

+0

Ok je les ai utilisé, le résultat était toujours avec ce patch noir dessus. J'ai fait: imagecreatefromstring, imagealphablendin, imagesavealpha et imagejpeg (je n'ai pas besoin d'un rééchantillonné donc je ne l'ai pas utilisé) – dynamic