Sprite en php, afficher les images côte à côte

Petit nouveau ! | 6 Messages

10 déc. 2021, 22:08

Bonjour, j'ai enfin récemment évoluer sur mon code.
Mais je bloque sur le stade final de mon projet où je voudrais afficher mes PNG côte à côte sur mon sprite.
Voici mon code:

<?php
function getImages($path)
{
$dh = opendir($path);
$t_width = array();
$t_height = array();
$myImages = array();

while (false !== ($files = readdir($dh))) {
if ($files != "." && $files != "..") {
list($width, $height) = getimagesize($path . "/" . $files);
$t_width[] = $width;
$t_height[] = $height;
$img = imagecreatefrompng($path . "/" . $files);
array_push($myImages, $img);
}
}

$n_width = array_sum($t_width);
$n_height = max($t_height);

$all_img = imagecreatetruecolor($n_width, $n_height);
$background = imagecolorallocatealpha($all_img, 255, 255, 255, 127);
imagefill($all_img, 0, 0, $background);
imagealphablending($all_img, false);
imagesavealpha($all_img, true);

$pos_x = 0;
$pos_y = 0;

for ($i = 0; $i < count($myImages); $i++) {
$myImages[$i];
$t_width[$i];
$n_width = $t_width[$i];
imagecopy($all_img, $img, $pos_x, $pos_y, 0, 0, $n_width, $n_height);
}

$sprite = "sprite.png";
imagepng($all_img, $sprite);
}
getImages("images");

Je sais que le problème provient du côté de mon "for" , étant débutant je tourne en rond pour trouver la solution...
J'ai réussi à créer un sprite, qui affiche une seule png pour le moment au lieu de toutes les afficher.
On m'a dit que ce serait un problème de positionnement de mes png .
Le résultat visuel : impossible de montrer une image externe.

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2021, 19:42

Il faut que tu ajoute chaque width de chaque image pour l'ajouter à la prochaine et ainsi placer les images côte à côte (x = 0 (sauvegarde du width de cette image 1), x = width de l'image 1 (sauvegarde du width de cette image 2), x = width de l'image 2, etc..)

Petit nouveau ! | 6 Messages

11 déc. 2021, 20:00

Merci pour ta réponse, donc je devrais refaire une boucle pour mon t_width ? J'ai dû mal à comprendre j'ai commencer récemment le php..

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2021, 20:34

Ta position x est toujours à zéro avec ton $pos_x = 0; qui ne change jamais, donc tes images se superposent, il te faut déclarer une variable (par exemple $width, en dessous de $pos_y = 0;) que t'initialise à 0 et que tu incrémente à chaque fois avec le width de chaque image, ça te permettra de placer l'image au bon endroit (à la suite, sur l'axe x)

Avatar du membre
Mammouth du PHP | 1564 Messages

11 déc. 2021, 20:36

Tu peux aussi faire directement $pos_x += $t_width[$i]; que tu mettra en dessous "imagecopy" sinon ton image va commencer à $t_width[$i] et pas à 0

Petit nouveau ! | 6 Messages

11 déc. 2021, 21:00

Merci ça fonctionne encore mieux avec ta solution donner en dernier !!
En revanche cela m'a donc dupliquer ma première image de mon dossier Images, pour bel et bien la mettre côte à côte.
Le problème maintenant est de savoir pourquoi cela me l'a dupliquée au lieu d'afficher normalement mes autres images de mon dossier Images.

Petit nouveau ! | 6 Messages

11 déc. 2021, 21:01

Est-ce que cela provient de ma boucle For ou serait-ce un problème de code avec mon Opendir/readdir ?

Avatar du membre
Mammouth du PHP | 1564 Messages

12 déc. 2021, 18:54

$img est toujours fixe, ce sera donc toujours la même image.