Bonjour,

Je suis en train de faire une script en PHP qui me permet de faire des TAG Friend comme sur Facebook. C'est la première fois que j'utilise l'objet GD en php.

Mon script php a pour but de créer un tag grace à une liste d'objets IMG qui contient une image. Cette objet , c'est moi qui l'es créer.

Lorsque je créer une image, elle ne fait pas exactement ce que je veux. Mon image n'est pas redimensionner correctement et mon image final affiche bien les images.

Voici donc mes deux fonctions :

// Creation de la meta image
  public function   createImg($base)
  {
    $line = 1;
    $col = 1;
    $max = ($this->maxLen > 0) ? $this->maxLen : $this->length;
    $x = $this->tailleSpace + ($this->tailleSpace + $this->tailleMini) * $this->maxImg;
    $nb_ligne = $max / $this->maxImg;
    $y = $this->tailleSpace + ($this->tailleSpace + $this->tailleMini) * $nb_ligne;
    $imageOut = imagecreate($x, $y);
    imagecolorallocate($imageOut, 255, 255, 255);
    foreach ($this->tab as $key => $uneImage)
      {
    if ($key == $this->maxLen and $this->maxLen > 0)
      break;
    if ($uneImage->get_error()) // ne gere pas les fichiers sans permissions
      continue;
    if (!$this->out_jpeg and preg_match("#\.(jpg|jpeg)$#", $uneImage)) // option j
      continue;
    if (!$this->out_png and preg_match("#\.png$#", $uneImage)) // option p
      continue;
    if (!$this->out_gif and preg_match("#\.gif$#", $uneImage)) // option g
      continue;
    $this->ecrireImg($uneImage, $imageOut, $line, $col);
    $col = ($col > $this->maxImg) ? 1 : ($col + 1);
    $line = ($col == 1) ? ($line + 1) : $line;
      }
    imagejpeg($imageOut, "toto/$base");
    imagedestroy($imageOut);
  }
  /*
   * Mettre une image dans la meta
   * name: ecrireImg
   * @param: Image meta
   * @param: GD de l'image à copier
   * @param: La ligne actuel sur lequel on copie
   * @param: La colonne actuel sur lequel on copie
   * @return il null ou false
   */
  private function  ecrireImg(&$img, &$gdDest, $ligne, $colonne)
  {
    $imgSrc = &$img->get_gd(); // recuperation du gd de l'image
    $imgTmp = imagecreate($this->tailleMini, $this->tailleMini);
    imagecolorallocate($imgTmp, 255, 255, 255);
    $sizemax = ($img->get_width() > $img->get_height()) ? $img->get_width() : $img->get_height();
    $x = $img->get_width() / $sizemax * $this->tailleMini;
    $y = $img->get_height() / $sizemax * $this->tailleMini;
    imagecopyresampled($imgTmp, $imgSrc, 0, 0, 0, 0, $x, $y, $img->get_width(), $img->get_height());
    imagejpeg($imgTmp, "toto/{$img->get_basename()}");
    imagedestroy($imgSrc);
    // Calcule de la nouvelle position
    $posX = $this->tailleSpace + ($this->tailleMini + $this->tailleSpace) * $colonne;
    $posY = $this->tailleSpace + ($this->tailleMini + $this->tailleSpace) * $ligne;
    // ajout de l'image temporaire dans notre image meta
    imagecopyresized($gdDest, $imgTmp, $posX, $posY, 0, 0, $this->tailleMini, $this->tailleMini, $x, $y);
    echo "Fin ecriture : {$img->get_src()}\n";
  }

Ces deux fonctions sont dans un objet listeIMG que j'ai créé.

La première me sert à créer une image. la deuxième va incrémenter une image dans la meta image (image final avec tous les photos en une seule).

Voila comment je le redimensionne :
La taille final de l'image * taille voulu / taille max de l'image.
Le positionnement = espacement + (taille image voulu + espacement) * nombre de colonne ou de ligne

Je veux mettre 10 photos par lignes et des lignes infinis ( nb de photos / max photos = 10 )

Le résultat final est que les photos s'inscrivent bien dans la méta image, mais la meta-image ne semble pas assez grand pour les accueillir, le positionnement est mal mis.

2 réponses


luffysan
Auteur
Réponse acceptée

Oui, j'ai d'abord crée toutes images temporaires. Mais en fait j'ai trouvé mon erreur.
Quand je définis le positionnement j'oublie toujours que l'image de la première colonne, il vaut juste 0 * (tailleTemp + tailleEspaceVide).

Par contre j'ai encore du mal à redimensionner mon image de base pour le mettre à la même taille que mon image temporaire.

Complexe ! Tu as essayé en découpant les étapes et en vérifiant les trucs un à un ?