Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1627 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Transparence pour superposition et changement de couleur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transparence pour superposition et changement de couleur

n°1234208
dwogsi
Défaillance cérébrale...
Posté le 29-10-2005 à 19:02:32  profilanswer
 

Salut tous!
Bon alors mon problème se situe au niveau de la création d'images, mais vu le titre je pense que c'est évident. Bref voici mon problème :
 
J'ais deux images, disons 1.gif et 2.gif de 100px * 100px chacune. Mon but est de les spperposer en utilisant une transparence définie à partir d'une couleur. Bon je sais c'est pas clair mais voici ce que ca donne :
 

Code :
  1. <?
  2. // Définitions des images à utiliser
  3. $image1 = "1.gif";
  4. $image2 = "2.gif";
  5. // Header type image/gif
  6. header ("Content-type: image/gif" );
  7. // Création de l'image 100px * 100px
  8. $im = ImageCreate (100, 100);
  9. // Création des couleurs
  10. $col_lignes = ImageColorAllocate ($im, 0, 0, 0);
  11. $col_texte = ImageColorAllocate ($im, 0, 0, 0);
  12. $transparent = ImageColorAllocate ($im, 255, 255, 255);
  13. // Définition de la couleur de transparence
  14. ImageColorTransparent ($im, $transparent);
  15. // Copie des images
  16. $res_image1 = ImageCreateFromGif($image1);
  17. $res_image2 = ImageCreateFromGif($image2);
  18. imagecopymerge ( $im, $res_image1, 0, 0, 0, 0, 100, 100, 100 );
  19. imagecopymerge ( $im, $res_image2, 0, 0, 0, 0, 100, 100, 100 );
  20. // Rendu
  21. ImageGif ($im);
  22. imagedestroy($im);
  23. ?>


 
Alors les deux images que j'utilises ont toutes deux un fond blanc.
Donc forcément quand je fait les copies des deux l'une viens surperposer l'autre et la masque.
 
Alors voici ma question :
Y a t il un moyen de faire en sorte que lorsque la copie d'une image se fait qu'une couleur (disons le blanc) soit ignorée, autrement dit qu'elle ne soit pas copiée et ainsi faire comme si mon image 2.gif avait un fond transparent et non pas blanc.
 
En vous remerciant et bonne soiré/journée.


Message édité par dwogsi le 31-10-2005 à 19:06:59

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
mood
Publicité
Posté le 29-10-2005 à 19:02:32  profilanswer
 

n°1234242
shakpana
des fois, j'me demande ...
Posté le 29-10-2005 à 20:01:41  profilanswer
 

en fait ImageColorTransparent() fonctionne qu'avec des truecolor
> Transparency is copied only with imagecopymerge() and true color images, not with imagecopy() or pallete images.
mais il te faut du truecolor :|
et là copies ton $res_image2 dans un nvlle truecolor, définit la couleur transparente et imagecopymerge().
mais en ce cas autant partir sur du png ...

n°1234244
dwogsi
Défaillance cérébrale...
Posté le 29-10-2005 à 20:03:37  profilanswer
 

Hummm j'avais justement vu pour le imagecopymerge(), mais je n'avais pas vu qu'il fallait une truecolor pour la transparence. En te remerciant, je vais tester ca. :jap:


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1234249
shakpana
des fois, j'me demande ...
Posté le 29-10-2005 à 20:11:07  profilanswer
 

cadeau :D
 

Code :
  1. <?
  2. // Définitions des images à utiliser
  3. $image1 = "1.gif";
  4. $image2 = "2.gif";
  5.  
  6. // Header type image/gif
  7. header ("Content-type: image/gif" );
  8.  
  9. // Création de l'image 100px * 100px
  10. $im = ImageCreate (100, 100);
  11.  
  12. // Création des couleurs
  13. $col_lignes = ImageColorAllocate ($im, 0, 0, 0);
  14. $col_texte = ImageColorAllocate ($im, 0, 0, 0);
  15. $transparent = ImageColorAllocate ($im, 255, 255, 255);
  16.  
  17. // Définition de la couleur de transparence
  18. //ImageColorTransparent ($im, $transparent);
  19.  
  20. // Copie des images
  21. $res_image1 = ImageCreateFromGif($image1);
  22. $res_image2 = ImageCreateFromGif($image2);
  23.  
  24. // BO PATCH
  25. $temp_im = imagecreatetruecolor (100, 100);
  26. $temp_transparent = ImageColorAllocate ($temp_im, 255, 255, 255);
  27. imagecopymerge ( $temp_im, $res_image2, 0, 0, 0, 0, 100, 100, 100 );
  28. ImageColorTransparent ($temp_im, $temp_transparent);
  29.  
  30. imagecopymerge ( $im, $res_image1, 0, 0, 0, 0, 100, 100, 100 );
  31. imagecopymerge ( $im, $temp_im, 0, 0, 0, 0, 100, 100, 100 );
  32. // EO PATCH
  33.  
  34. // Rendu
  35. ImageGif ($im);
  36. imagedestroy($im);
  37. ?>


 
edit : mais sérieux, part sur du .png, non ?


Message édité par shakpana le 29-10-2005 à 20:11:49
n°1234345
dwogsi
Défaillance cérébrale...
Posté le 30-10-2005 à 05:33:47  profilanswer
 

Mais ca marche c'est merveilleux merci!!! :jap:


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1234347
dwogsi
Défaillance cérébrale...
Posté le 30-10-2005 à 05:45:38  profilanswer
 

Pourquoi du png plus que du gif? est ce que ca a une importance dans mon cas ou est ce que tu parle du "cas générale"?


Message édité par dwogsi le 30-10-2005 à 05:45:52

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1234437
shakpana
des fois, j'me demande ...
Posté le 30-10-2005 à 13:10:28  profilanswer
 

oui, en fait tu as raison, je ne sais pas vraiment d'où viennent tes images, de ce qu'il a dessus ou si au final tu as besoin d'une image 8 bit, donc p.e. que le png n'a pas d'interêt ppour toi.
Mais ce que tu fais me fait étrangement penser à un système que je viens de mettre en place, un système de thumbnailing multicouches genre background / image / foreground. Et donc le foreground est un png 24 avec un joli dégradé genre couleur vers alpha, ce qui est totalement impossible avec une transparence mono-couleur (merci la couche alpha), et au final j'en sors un .jpg, car j'ai plus besoin de la transparence ;)
De plus, si tu te fais un png foreground de taille raisonnable, le redimensionnement n'impacte pas sur l'aliasing comme sur les images 8 bits, ouala pourquoi du .png ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1234441
dwogsi
Défaillance cérébrale...
Posté le 30-10-2005 à 13:19:39  profilanswer
 

Non mais en fait ce sur quoi je trvail est système permettant de "fusionner" des images tout format donc en fait le gif c'était juste pour l'exemple, ce que je fais c'est que je laisse totalement le choix à l'utulisateur qui peu donc choisir ses deux images, mon code en détecte le formet les fusionne et laisse encore le choix à l'utilisateur du format de sortie.

n°1234478
dwogsi
Défaillance cérébrale...
Posté le 30-10-2005 à 14:56:51  profilanswer
 

Tiens en fait en passant j'en profite pour poser une nouvelle question :
Existe-t-il une fonction qui permet de changer une couleur sur l'image, par exemple de passer tout ce qui est en noir en rouge? Je n'ais rien vu de tel mais je suis peut être passé à côté...

n°1235292
shakpana
des fois, j'me demande ...
Posté le 31-10-2005 à 18:33:06  profilanswer
 

dwogsi a écrit :

...changer une couleur sur l'image, par exemple de passer tout ce qui est en noir en rouge...


je dirais que si c'est une image à pallette, rien de plus simple ...  
imagecolorexact() puis imagecolorset()
 
maintenant sur une truecolor, je ne sais pas si c'est possible via GD ...
mais là encore une fois un png 24 avec alpha, et hop  :p
[ edit: mais je sais, ça correpond pas à ton appli ... ]


Message édité par shakpana le 31-10-2005 à 18:34:48

---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
mood
Publicité
Posté le 31-10-2005 à 18:33:06  profilanswer
 

n°1235303
dwogsi
Défaillance cérébrale...
Posté le 31-10-2005 à 18:48:00  profilanswer
 

Bah en fait je me suis jamais vraiment intéressé à la création d'images via PHP/GD, sauf pour faire des captcha.. Donc je continue à m'y intéressé pour développé d'autres applis pour mon plaisir personnel. En tout cas merci, je vais tester ça.


Message édité par dwogsi le 31-10-2005 à 18:48:12

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1235321
dwogsi
Défaillance cérébrale...
Posté le 31-10-2005 à 19:14:56  profilanswer
 

Bon et bien ta solution marche à merveille! Merci :jap:
 
Sinon j'arrive toujours pas à rendre une zone transparentes das mon image si par exemple le rendu est en gif, j'ai lu des choses sur les png et les couches alpha mais là je suis complétement largué... Mais je vais me débrouillé tant bien que mal. Encore merci.

n°1235352
shakpana
des fois, j'me demande ...
Posté le 31-10-2005 à 20:05:10  profilanswer
 

dwogsi a écrit :

Sinon j'arrive toujours pas à rendre une zone transparentes das mon image si par exemple le rendu est en gif, j'ai lu des choses sur les png et les couches alpha mais là je suis complétement largué...


je suis pas sûr de voir où est ton soucis ?
Tu veux dire de rendre une couleur transparente pour une sortie en gif ?
 
Ci dessous un exemple, en image 8 bits
- ouverture d'un gif 8 bits avec transparence
- création d'une img de destination
- application d'un arrière plan kaki (hmmm...)
- définition de la couleur RGB(119, 123, 180) - le violet du logo - en tant que transparente  
- sortie vers un gif 8 bits
 
et en commenté, la version truecolor/png - m$ie Not Friendly
le résultat est très moche, mais illustre bien le propos  [:coch]  
 

Code :
  1. $im = imagecreatefromgif ( 'http://sk2.php.net/images/php.gif' );
  2. $w = imagesx ( $im );
  3. $h = imagesy ( $im );
  4.  
  5. //$iOut = imagecreatetruecolor ( $w + 10, $h + 10 );
  6. $iOut = imagecreate ( $w + 10, $h + 10 );
  7.  
  8. $background_color = imagecolorallocate( $iOut, 200, 200, 55 );
  9. imagefill ( $iOut, 0, 0, $background_color );
  10.  
  11. //imagecopymerge ( $iOut, $im, 0, 0, 0, 0, $w, $h, 100 );
  12. imagecopy ( $iOut, $im, 0, 0, 0, 0, $w, $h );
  13.  
  14. $trans_color = imagecolorexact( $iOut, 119, 123, 180 );
  15. imagecolortransparent ( $iOut, $trans_color );
  16.  
  17. //header ( 'Content-type: image/png' );
  18. //imagepng ( $iOut );
  19. header ( 'Content-type: image/gif' );
  20. imagegif ( $iOut );


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1235765
dwogsi
Défaillance cérébrale...
Posté le 01-11-2005 à 16:55:08  profilanswer
 

Ah bah ca marche très bien merci :jap:
Je sais pas où j'ais raté quelque chose, certainement dans l'ordre des choses mais bon. Merci encore!

n°1235773
shakpana
des fois, j'me demande ...
Posté le 01-11-2005 à 17:03:21  profilanswer
 

dwogsi a écrit :

Je sais pas où j'ais raté quelque chose, certainement dans l'ordre des choses mais bon. Merci encore!


ouais, d'ailleurs moi aussi je me demande un truc, c'est quoi ce délire où soi disant la transparence n'est pas copiée avec imagecopy() si pas en truecolour (comme je le dis plus haut, en citant la doc), passke là ça marche sur un GD 2+ en 8bits, peut-être était-ce sur les versions pré 2.x ?
Il faut dire que la doc php (et même celle de GD) n'est pas très claire sur comportement/utilisation des fonctions selon pallette/truecolour ... m'enfin ...


---------------
Il faut toujours arrondir les angles -- Raymond Poincaré (à moins que ce soit de Cicéron)
n°1235781
dwogsi
Défaillance cérébrale...
Posté le 01-11-2005 à 17:22:37  profilanswer
 

Ouai de toute facon la doc sur GD franchement c'est un peu maigre... Et pas très clair comme tu l'as dit.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Transparence pour superposition et changement de couleur

 

Sujets relatifs
Changement de page phpsouligner en couleur...
Changement de variable dans un forchangement de couleur pour barre défilante
comment est-ce qu'on peut changer la couleur des écriture sur Visual CMigration Access => Mysql : changement code asp ??
couleur et comboboxchangement de nom de domaine et mon script marche plus..
Superposition images html 
Plus de sujets relatifs à : Transparence pour superposition et changement de couleur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR