0
votes

PHP / GD: Comment gérer la transparence JPG?

JPG ne prend pas en charge la transparence.

Pourtant, vous pouvez exporter une image avec des zones transparentes à partir de l'exemple GIMP. Dans ce cas, les zones transparentes montrent noir ou blanc dans votre navigateur, votre explorateur Windows ou un autre logiciel. P>

Je reçois régulièrement de tels fichiers que je dois traiter et fournir plusieurs formats plus petits. Je fais cela avec un script PHP à l'aide de la bibliothèque GD. Le problème est qu'il est imprévisible si ces zones se tournent en noir ou en blanc dans les versions traitées. Même les arrière-plans blancs peuvent se transformer en noir. P>

Donc, ma question est de savoir s'il est d'une manière utile de détecter cette zone "transparente" dans GD et d'assigner une couleur spécifique. P>

Voir Par exemple, ces deux images: http://www.bilbil.com/9156-thickbox_default/bus.jpgleight/a > http://bilbil.com/img/p/9/ 1/5/6 / 9156.jpg p>

Pour le moment, j'utilise ce code: P>

$srcfile = "9158.jpg";
$dir ="/test/";
list($width, $height, $imgtype, $attr) = @getimagesize( $dir.$srcfile );
$src = imagecreatefromjpeg($dir.$srcfile);
$newheight=$newwidth = 800;
$img = imagecreatetruecolor ( $newwidth , $newheight );
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);
imagecopyresampled($img, $src, ($newwidth-$width)/2, ($newheight-$height)/2, 0, 0, $width, $height, $width, $height);
if(!imagejpeg($img, $dir.'test.jpg', 97))
  echo("Error creating testimage");


2 commentaires

Ils ne "montrent pas comme" noir ou blanc, ils sont noir ou blanc. Vous pourrait écrire quelque chose qui définit le canal alpha pour tous les pixels # 000000 ou #FFFFFFF des bords, puis enregistrez-le dans un format qui prend en charge la transparence, mais vous aurez ensuite des problèmes d'aliasing et des artefacts JPEG. La solution consiste à faire vous envoyer des images dans le format correct et non JPEG.


Lorsque je vois l'image de l'image d'un JPG comme noir dans l'Explorateur Windows et blanc dans mon navigateur, je ne peux pas le décrire autre que "montrent comme".


3 Réponses :


0
votes

Vous pouvez donner une chance à ImageMagick . La commande suivante convertira le fichier .jpeg en .png avec transparence.

convert bus.jpg -fuzz 1% -trim +repage a.jpg


0 commentaires

0
votes

Je ne suis pas sûr de ce que vous demandez. Vous commencez par une image non-JPG avec transparence et convertir en JPG? Ou avez-vous déjà le JPG?

Si vous commencez par une image transparente telle que PNG ou TIFF et que vous souhaitez convertir en JPG et que vous avez toujours un fond noir (ou une autre couleur), puis dans imagemagick strong>, vous pouvez faire: p> xxx pré>


ou p> xxx pré>


Remplacez le noir avec une autre couleur que vous souhaitez pour où il était transparent, tel que blanc. P>

Si vous avez déjà un JPG avec une certaine couleur et que vous voulez le changer en noir, alors faites: P>

convert image.jpg -fuzz XX% -fill black -opaque somecolor image.jpg


0 commentaires

1
votes

Dans presque tous les cas, vous pouvez utiliser la couleur de pixel supérieur gauche comme couleur transparente.


0 commentaires