bindaa Posté(e) le 4 mai 2009 Partager Posté(e) le 4 mai 2009 Saloute amis INpactiens ! Pour un premier topic sur PCI, je demande déjà de l'aide Voilà le topo. En gros je souhaite simplement ajouter des watermark à des images. Je sais, dis comme ça, ça a l'air très con, mais voilà comment ça se passe pour l'instant. - sur une image jpg, le watermark se met très bien, il est transparent - sur une image png en laissant l'alpha blending, ça marche très bien aussi (sauf que du coup, on perd la possible transparence de l'image d'origine) - sur une image png en gardant la valeur alpha, le watermark n'est plus transparent mais l'image d'origine oui... Alors, si vous avez un apache sous la main, voilà les fichiers pour tester: http://www.axel-binda.com/pci/img.png http://www.axel-binda.com/pci/img.jpg http://www.axel-binda.com/pci/wm.png Et wala les deux pages qui vont vous servir à tester index.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> <style type="text/css"> body{ background : #f1f1f1; } </style> </head> <body> <img alt="gd generated" src="gd.php?<?php echo date("His",time()); ?>"> </body> </html> gd.php <?php # create the img resources $img = imagecreatefrompng('img.png'); $jpg = imagecreatefromjpeg('img.jpg'); $wm = imagecreatefrompng('wm.png'); # create a new image $final = imagecreatetruecolor(400,400); # set the alpha settings for the background image //imagealphablending($final,false); //imagesavealpha($final,true); # set the alpha settings for the watermark imagealphablending($wm,false); imagesavealpha($wm,true); # create the final image # add the PNG background image imagecopyresampled($final,$img,0,0,0,0,400,400,400,400); # add the JPG background image //imagecopyresampled($final,$jpg,0,0,0,0,400,400,400,400); # add the watermark imagecopyresampled($final,$wm,20,20,0,0,100,100,100,100); # dump the final image header("Content-type: image/png"); return imagepng($final); ?> C'est le minimum syndical dans mon cas. En fait, je pense que GD s'emmêle les pinceaux dès qu'on lui demande de gérer deux image transparentes à la fois. Ptètre que c'est une limitation de la librairie, je sais pas trop mais c'est aussi pour ça que je poste ici Si quelqu'un a une idée, je suis preneur. Lien vers le commentaire Partager sur d’autres sites More sharing options...
bindaa Posté(e) le 5 mai 2009 Auteur Partager Posté(e) le 5 mai 2009 C'est un sujet qui fâche les watermark ? Bon j'ai continué à creuser un peu plus le pourquoi du comment et j'en suis venu à cette déduction. En fait, le watermark n'est pas rempli avec une couleur mais il est bien transparent. Le problème est lorsque je copie le watermark dans le PNG d'origine c'est comme si je faisais un trou dedans et que je calais le watermark dedans. Mais je veux pas ça Et puis je comprends toujours pas pourquoi ça réagit pas pareil avec les JPG... Toujours pas d'idées ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
bindaa Posté(e) le 12 mai 2009 Auteur Partager Posté(e) le 12 mai 2009 Bon ben j'ai finalement trouvé la solution qui traînait dans les bas-fonds d'un forum ou de je sais plus où exactement, mais je mets la solution ici, ça pourra peut-être servir à quelqu'un d'autre qui sait # if the base picture is already a PNG, we have to apply some extra processes if($this->extension == 'png'){ # remove the alpha blending imagealphablending($this->image, false); # set the transparent color $transparent = imagecolorallocatealpha($this->image, 0, 0, 0, 127); imagefill($this->image, 0, 0, $transparent); # set the transparency settings for the picture after adding the transparency imagesavealpha($this->image,true); imagealphablending($this->image, true); } Voilà, en fait ça consiste à faire un savant mélange des propriétés alpha d'une image PNG dans un ordre bien défini sinon ça marche plus Merci pour l'inspiration divine du type qui a trouvé ça Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 12 mai 2009 Partager Posté(e) le 12 mai 2009 J'avais cherché vite fait sans trouver de solution convainquante. Merci d'avoir posté la solution Lien vers le commentaire Partager sur d’autres sites More sharing options...
bindaa Posté(e) le 13 mai 2009 Auteur Partager Posté(e) le 13 mai 2009 De rien En fait, vu le temps que j'ai passé dessus à me prendre le chou, je me suis dit que ça pourrait vraiment servir à quelqu'un d'autre. Pi à moi aussi vu que j'ai une mémoire de poisson rouge En tout cas ouais, le bout de code que j'ai mis en solution est à appliquer à l'image principale juste avant de lui coller le watermark dessus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.