Collage images transparentes avec librairie GD

chamagne -  
chamagne Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Ca fait des jours que je coince et en appelle à votre sagacité.
J'essaie d'accoler 2 images transparente (png), de même hauteur, alignées à la base.
C'est OK et vérifié jusqu'à l'utilisation de GD.
Mon code que j'ai bien commenté pour compréhension :
<?php
// Images des carateres de la police toutes transparentes et de même hauteur
// Toutes images dans le répertoire courant - Image résultante dans répertoire temporaire
function merge($data, $interval)
 {
  // INITIALISATIONS
  $result = "/temp/".$data.".png";
  $images = array();
  $letters = array();
  $width = array();
  $x_init = array();
  $width_result = 0;
  // DECOUPAGE DE L'ENTREE EN CARACTERES IMAGES UNIQUES
  $nb = strlen($data);
  for ($i=0; $i<$nb; $i++) $letters[$i] = substr($data, $i, 1).'.png';
  // CALCUL POSITION ET LARGEUR DE CHAQUE IMAGE ET DES DIMENSIONS DE L'IMAGE FINALE
  $i = 0;
  foreach($letters as $value)
   {
    $x_init[$i] = array_sum($width) + ($i * $interval);
    $size = getimagesize($value);
    array_push($width, $size[0]);
    $i++;
   }
  $height = $size[1]; // toutes les images sont de même hauteur
  $width_result = array_sum($width) + ($nb * $interval);
  // CREATION IMAGE FINALE VIDE ET TRANSPARENTE
  $empty = imagecreatetruecolor($width_result, $height);
  imagealphablending($empty, false);
  imagesavealpha($empty, true);
  $trans_colour = imagecolorallocatealpha($empty, 0, 0, 0, 127);
  imagefill($empty, 0, 0, $trans_colour);

  // POUR CHAQUE LETTRE DU MOT/PHRASE
  for ($i=0; $i<$nb; $i++)
   {
    // Création
    $images[$i] = imagecreatefrompng($letters[$i]);
    // Copie dans l'image finale
    imagecopy($empty, $images[$i], $x_init[$i], 0, 0, 0, $width[$i], $height);
   }
  // CREATION IMAGE FINALE
  imagepng($empty, $result);
  // NETTOYAGE
  imagedestroy($empty);
  for ($i=0; $i<$nb; $i++) imagedestroy($images[$i]);
 }
// LANCEMENT COLLAGE ET AFFICHAGE IMAGE RESULTANTE
$data = "exemple"; // texte à traduire en image avec la police graphique
$interval = 5; // espace à droite de chaque caractère du texte
merge($data, $interval);
echo '<img src="".$data.'.png">';
?>

Merci de votre aide

EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

3 réponses

Utilisateur anonyme
 
Bon je sais pas si il y a une erreur au niveau de la lib GD mais ton echo n'est pas bon:

echo '<img src="".$data.'.png">';


Essaye ça

echo '<img src="'.$data.'.png">';
0
chamagne Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour
Curieux ça, je n'ai pas cette erreur chez moi et ai fait un copier-coller;
De toutes les façons, je pense que php n'aurait pas apprécié et m'aurait envoyé balader.
@+
0
chamagne Messages postés 8 Date d'inscription   Statut Membre Dernière intervention  
 
C'est réglé !
1ère modif : remplacer /temp par temp
2ème modif : changer
imagefill($empty, 0, 0, $trans_colour);

par
imagefilledrectangle($empty, 0, 0, $width_result, $height, $trans_colour);
imagealphablending($empty, true);

Mise en oeuvre sur http://www.geologues-prospecteurs.fr/alphabets/cristaux/
(reste un petit pb avec le signe euro à ne pas utiliser)
0