Rassembler plusieurs image en une seule - PHP - Programmation
Marsh Posté le 13-12-2023 à 14:31:43
Ben tu as mis en dur "1200", il faut que tu récupères la largeur de l'image avant par programmation et que tu enregistres une sorte de compteur que tu incrémentes à chaque fois qu'une image est ajoutée pour gérer ton offset.
Marsh Posté le 13-12-2023 à 15:49:17
antac a écrit : Ben tu as mis en dur "1200", il faut que tu récupères la largeur de l'image avant par programmation et que tu enregistres une sorte de compteur que tu incrémentes à chaque fois qu'une image est ajoutée pour gérer ton offset. |
J'essaye j'essaye,
<?php
function my_merge_image($img1, $img2)
{
$infosimg1 = list($x1, $y1) = getimagesize('img1.png');
$infosimg2 = list($x2, $y2) = getimagesize('img2.png');
print_r ($infosimg1);
print_r ($infosimg2);
$size1 = $infosimg1 [3];
$size2 = $infosimg2 [3];
echo $size1 . PHP_EOL;
echo $size2 . PHP_EOL;
$valuesize1 = explode (" ", $size1);
$x1 = $valuesize1 [0];
$y1 = $valuesize1 [1];
$valuesize2 = explode (" ", $size2);
$x2 = $valuesize2 [0];
$y2 = $valuesize2 [1];
echo $x1 . PHP_EOL;
echo $y2 . PHP_EOL;
echo $x2 . PHP_EOL;
echo $y2 . PHP_EOL;
}
my_merge_image("img1.png", "img2.png" );
dans ce code j'utilise list pour lister les infos des photos, la 3 eme valeur étant width et heigth donc ce que je recherche, c'est pourquoi je défini $size1 et$size2 avec la value 3 du tableau.
Ensuite j'utilise explode pour récupéré les valeur width et heigth seule (séparément), voilà, j'ai maintenant ça d'afficher dans mpn terminal.
php css_generator.php
Array
(
[0] => 1200
[1] => 800
[2] => 3
[3] => width="1200" height="800"
[bits] => 8
[mime] => image/png
)
Array
(
[0] => 1165
[1] => 801
[2] => 3
[3] => width="1165" height="801"
[bits] => 8
[mime] => image/png
)
width="1200" height="800"
width="1165" height="801"
width="1200"
height="801"
width="1165"
height="801"
j'ai donc réussi à récupérer une width et une height pour mes 2 images et je les ai mis dans des variables $x1 $x2 $y1 $y2 pour m'en servir par la suite, mais maintenant j'aimerais ne garder que la valeur et non la clé, c'est à dire 1200 1165 801 et 800.
Je ne vois pas comment faire, quand j'aurais réussi je me pencherai sur l'étape 2 qui demande de scanner un dossier pour y prendre les images qui s'y trouvent et les ajouter a une seule image, automatiquement.
Et merci pour votre aide je débute et j'ai des lacunes mais je suis motivé.
Marsh Posté le 13-12-2023 à 16:25:16
Ici on aide à trouver, on corriges le code mais on ne résout pas les exercices cf. la charte de la section.
Lit la doc de ses 2 fonctions (et les exemples) :
https://www.php.net/manual/fr/funct [...] ecolor.php
https://www.php.net/manual/fr/funct [...] ymerge.php
Faut que tu crées ton image de destination avec ta dimension total et que tu positionnes tes images ou il le faut.
Le reste c'est des simples additions, prend un papier et un crayon, ça aide ! ^^
Pour le parcours de dossier tu as :
https://www.php.net/manual/fr/function.glob.php
Qui est très bien si tu est sur de n'avoir que des png.
Ou :
https://www.php.net/manual/fr/function.scandir
Mais il faudra filtrer certains trucs que tu ne veux pas (genre . et .. ).
Marsh Posté le 14-12-2023 à 17:27:41
Ta fonction de merge d'images devrait prendre en paramètre un nom de répertoire ou une liste de chemins d'images. Là, c'est figé à 2 image, tu vas te retrouver bloquer pour la suite de ton exo
$infosimg1 = list($x1, $y1) = getimagesize('img1.png');
--> Pas franchement propre
Et +1 pour les conseils de mechkurt.
Marsh Posté le 13-12-2023 à 14:19:27
Bonjour,
Je dois pour un exercice faire une fonction qui recherche des fichiers images (jpg png etc...) et qui les ajoutent à un nouveau fichier image, j'ai réussis mais j'aimerais automatiser le fait qu'elle se mette les unes après les autres, et pas les une sur les autres.
Pour l'instant voici ce que j'ai réussi à faire:
<?php
function my_merge_image($img1, $img2)
{
$corps = imagecreatetruecolor(2400, 1600);
$img1 = imagecreatefrompng("img1.png" );
$img2 = imagecreatefrompng("img2.png" );
$X1 = imagesx($img1);
$Y1 = imagesy($img1);
$X2 = imagesx($img2);
$Y2 = imagesy($img2);
list($x1, $y1) = getimagesize('img1.png');
list($x2, $y2) = getimagesize('img2.png');
imagecopymerge($corps, $img1, 0, 0, 0, 0, $X1, $Y1, 100);
imagecopymerge($corps, $img2, 1200, 0, 0, 0, $X2, $Y2, 100);
imagepng($corps, "image.png" );
return;
}
my_merge_image("img1.png", "img2.png" );
Donc j'ai précisé les emplacements en indiquant 1200 pour l'axe x de la deuxième photo ce qui fait qu'elle commence à 1200 pixels du bord gauche et comme les deux images font 1200x800 ça entre parfaitement car j'ai défini mon corps à 2400x1600 soit le double, mais je dois ajouter ou modifier quelque chose pour que ça se place directement à la suite des autres et ce peu importe la taille de l'image. Elle ne doivent pas empiéter les unes sur les autres.
Ce n'est que la première étape de l'exercice que je dois rendre dans 2 semaines et je suis bloqué depuis ce matin.
Cordialement.