8711 sujets

Développement web côté serveur, CMS

Bonjour à tous
Un site d'égyptologie a besoin d'un répertoire contenant des hiéroglyphe sous forme d'images, l'auteur disposant d'un outil sophistiqué qui lui permet de faire ça.
L'outil génère des images .gif en noir sur fond blanc, ce qui est gênant si on met un fond coloré.
J'ai cherché un moyen en PHP qui permette de fabriquer cela automatiquement.
J'ai trouvé le code suivant sur Internet, où pour le moment je fabrique des images .png à partir des images .gif

$img = imagecreatefromgif($imgPath);
$white = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $white);
imagesavealpha($img, true);
imagepng($img, fullPath($imgPath2));

Deux problèmes:
1) je ne comprends pas comment c'est sensé marcher ce dont j'ai horreur
c'est quoi ces fonctions ? que font elles exactement ?
La doc est faite apparemment pour ceux qui savent, ce qui n'améliore pas ma compréhension.
2) je constate que ça marche "quelquefois", ce qui ne fait pas mon affaire.
J'ai même des cas où ça marche à l'envers: si l’utilisateur avait déjà fait un fond transparent, il devient blanc.

Une idée pour traiter ce problème?

Merci de votre aide
Modifié par PapyJP (07 Nov 2021 - 16:56)
connecté
Bonsoir,

Je ne connaissais pas ces fonctions PHP (d'ailleurs aucune raison que je les utilise jamais), mais du coup je suis allé voir par curiosité et je les ai trouvé dans le manuel PHP. Comme celle-ci par exemple : imagecolortransparent().
Oui, moi aussi je les ai trouvées mais ça n'explique pas ce qui se passe.
J'ai fait des tas de traces, pas possible de comprendre ce qui ne fonctionne pas dans le programme.
J'en suis réduit à penser que les "blancs" de fond d'image ne sont pas vraiment des rgb(255, 255, 255)...
$img = imagecreatefromgif($imgPath); //créer un gif à partir d'un path
$white = imagecolorallocate($img, 255, 255, 255); //tu récupère toutes les couleurs rgb 255 255 255 de l'image, ça te retourne un genre d'ID qui te permettra de jouer avec avec la function suivante; le problème, c'est que si ton tu as un fond blanc, et que ton image (pas le fond donc) contient du blanc, alors il va être prit en compte aussi. si tu as un fond vert et que ton image contient le même vert alors chaque pixel de vert sera prix en compte. je ne connais pas de moyen pour dire "prend uniquement le fond";
imagecolortransparent($img, $white); // ici on rend chaque pixel contenant l'id lié au retour de la fonction précédente et on met en transparence;
imagesavealpha($img, true); // ici on précise qu'on garde le canal de l'alpha à "true"; le canal de l'alpha permet d'indiqué le degré de transparence
imagepng($img, fullPath($imgPath2));// la pas besoin d'expliquer
Meilleure solution
Merci de tes explications.
J'avais fini, après m'y être remis plusieurs fois hier après midi, par comprendre à peu près cela, je suis maintenant rassuré : je n'ai pas perdu la capacité de comprendre le code des autres Smiley eek Smiley rolleyes Smiley cligne J'ai fait de la maintenance de code système il y a ... très longtemps

Ce code devrait faire ce que je désire, mais malheureusement ce n'est pas le cas.
Il doit y avoir quelque chose dans les .gif généré par l'outil qui ne convient pas, par exemple le "blanc" de fond qui ne soit pas réellement blanc ou un truc similaire.

La plupart du temps les hiéroglyphes sont affichés sur fond blanc, il n'y en a que quelques uns sur fond coloré. Il sera plus simple de faire ça à la main au coup par coup en fonction des besoins. Je laisse tomber.
Salut !

As-tu un contact avec l’auteur des hiéroglyphes ? Généralement tous les logiciels de traitement d’images permettent l’exportation en PNG. Ça t’évite de prendre le problème à l’envers Smiley biggrin
Modifié par Anymah (08 Nov 2021 - 14:56)
Anymah a écrit :
Salut !

As-tu un contact avec l’auteur des hiéroglyphes ? Généralement tous les logiciels de traitement d’images permettent l’exportation en PNG. Ça t’évite de prendre le problème à l’envers Smiley biggrin

Merci de ton conseil, je vais le dire à l'auteur.
Moyennant quoi ça pourrait résoudre le problème pour les hiéroglyphes futurs, mais pas pour ceux qu'il a déjà faits.