Aller au contenu

[GD] Chevauchements d'images transparantes


Direct Sims

Sujets conseillés

Bonsoir,

Après plusieurs heures de recherches veines, je m'en remet à vous.

Je créer un script permettant d'écrire du texte sous forme d'images, je m'explique :

Chaque lettre de l'utilisateur correspond à une image .png transparente. Le problème c'est que les lettres se chevauchent et chaque partie transparente, rend en partie transparente l'image précédente, voici une image du problème :

181301.png

Voici mon script :

<?php
// Type de l'image
header ("Content-type: image/png");

// Informations texte
$lettres = stripslashes(htmlspecialchars($_GET['session_lettres']));
if($lettres == "") $lettres = "Erreur";
$width = 105*strlen($lettres);
$height = 155;

// Création de l'image
$image = imagecreate($width,$height);
$orange = imagecolorallocate($image, 255, 106, 0);

for ($i=0; $i <= strlen($lettres); $i++) // Boucle des lettres
{
// Chargement des lettres
$lettre = imagecreatefrompng("./images/lettres/".$lettres[$i].".png");
$width_lettre = imagesx($lettre);
$height_lettre = imagesy($lettre);

// Fusion des images
imagealphablending($lettre,false);
imagecopy($image, $lettre, $i*100, 0, 0, 0, $width, $height*2);
imagesavealpha($lettre,true);

}

imagecolortransparent($image, $orange);

// Création de l'image
imagepng($image);
?>

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Direct Sims,

je pense que ton problème viens du fait que tu copies l'image suivante 100 pixels plus loin que l'image précédente

imagecopy($image, $lettre, $i*100, 0, 0, 0, $width, $height*2);

Il faudrait plutôt créer un compteur qui ajoute la largeur de l'image $width_lettre dont tu ne te sers pas d'ailleurs. Par exemple :

imagecopy($image, $lettre, $xLettreSuivante, 0, 0, 0, $width, $height*2);
$xLettreSuivante+=$width_lettre;

Lien vers le commentaire
Partager sur d’autres sites

Il ne faudrait pas plutôt utiliser imagecopymerge ?

Et d'après ce que j'ai lu, ça fonctionne plus facilement avec des .gif !

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres sites

Oui moi aussi j'ai fait avec les gifs, mais j'ai après il y a le problème de qualité qu'il faut régler :IMSTP1: C'est vraiment un casse tête ce truc :dots:

EDIT: non le gif ne va pas, il ne gère qu'un seul niveau de transparence...

Modifié par Direct Sims
Lien vers le commentaire
Partager sur d’autres sites

Il faut que tu crées l'image avec imagecreatetruecolor, et hop! Note que les imagealphablending et imagesavealpha sont inutiles.

Par contre c'est quoi le but du jeu avec l'orange? Si tu veux avoir tes lettres sur fond orange il va falloir faire un petit coup de imagefilledrectangle (par exemple) avant de copier les lettres dessus.

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Là j'ai une belle erreur :unsure:

<?php
ini_set("memory_limit",'16M');

// Type de l'image
header ("Content-type: image/png");

// Informations texte
$lettres = stripslashes(htmlspecialchars($_GET['session_lettres']));
if($lettres == "") $lettres = "erreur";
$width = 100*strlen($lettres);
$height = 165;

// Création de l'image
$image = imagecreatetruecolor($width,$height);

for ($i=0; $i <= strlen($lettres); $i++) // Boucle des lettres
{
// Chargement des lettres
$lettre = imageformpng("http://creasims.simsous.directsims.com/images/lettres/".$lettres[$i].".png");
$width_lettre = imagesx($lettre);
$height_lettre = imagesy($lettre);

// Fusion des images
imagecopy($image, $lettre, $i*90, 0, 0, 0, $width_lettre, $height_lettre);
}

// Création de l'image
imagepng($image);
?>

Lien vers le commentaire
Partager sur d’autres sites

Ajoute ça après le imagecreatetruecolor (et donc avant de copier tes lettres dessus):

imagesavealpha($image,true);
$transp = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image,0,0,$transp);

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...