Jump to content

[GD] Chevauchements d'images transparantes


Recommended Posts

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);
?>

Link to post
Share on other 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;

Link to post
Share on other 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 !

Edited by cyberlaura
Link to post
Share on other 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...

Edited by Direct Sims
Link to post
Share on other 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.

Link to post
Share on other 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);
?>

Link to post
Share on other 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.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...