Faire et configurer une mosaïque d'images en PHP PHP


Aperçu

Apercu du snippet

Description

Code

Je partage avec vous ce snippet que j'avais réalisé afin de faire la bannière du compte Twitter pour les 200 sites de l'annuaire ! J'avais recherché quelques outils sur Internet mais je n'avais pas trouvé mon bonheur. Au lieu d'utiliser un outil d'édition d'images, je me suis dis que ce serait peut-être plus simple en utilisant la librairie GD en PHP 😉.

Le code est personnalisable afin que vous puissiez utiliser ce code pour faire la mosaïque que vous voulez ! Modifiez les variables présentes en haut du code pour modifier la taille de l'image finale, les images qui seront dans la mosaïque et leur format ! 

Si l'image ne s'affiche pas, vous pouvez commenter la ligne header() afin d'afficher le message d'erreur. Le code a été testé sur + de 150 images et il fonctionne correctement. Toutefois, n'hésitez pas à m'informer si vous rencontrez des difficultés. 

Le code est assez simple et donc peut être utilisé et modifié librement ! 🙂


Statistiques

Ajouté par Nazario
le 21/07/2018 à 23h00
76
lignes de code
146
vues

Aucun vote pour le moment


Code PHP

<?php

/* Début de la configuration
Selectionner dans un premier temps la taille de l'image finale et ajuster ensuite les tailles des images finales
Terminez avec le max de colonnes, cela permettra d'ajuster la mosaïque
————————————————————————————————————————————————————————————*/
// Taille de l'image finale
$dim_image_width = 1500;
$dim_image_height = 500;
// Couleur de fond de l'image en format RGB
$background_color = ["255","255","255"];
// Dossier où se trouve les images à insérer
$folder = 'public/images/screenshots/';
// Taille de la bordure
$border = 2;
// Taille des images sources
$width_img_src = 320;
$height_img_src = 179;
// Taille des images finales
$width_img = 110;
$height_img = 61;
// Max de colonnes
$max_rows = 14; //19
// Max d'images
$max_images = 150;
/* Fin de la configuration
————————————————————————————————————————————————————————————*/

// On pousse la limite de mémoire car ça va consommer un peu (à augmenter si nécessaire)
ini_set('memory_limit','8M');
// On créé l'image avec les tailles indiquées dans la configuration
$img = @imagecreatetruecolor($dim_image_width, $dim_image_height) or die("Impossible d'initialiser la bibliothèque GD");
// On indique que le fichier est de type image (commenter la ligne ci-dessous pour voir vos erreurs PHP)
header("Content-Type: image/png");
// On indique la couleur de fond indiquée dans la configuration
$bg = imagecolorallocate($img, $background_color[0], $background_color[1], $background_color[2]);
imagefill($img, 0, 0, $bg);

// On parcours le dossier
if ($handle = opendir($folder)) {
	$i = 0; // Variable incrémentée à chaque fichier
	$j = 0; // Variable incrémentée à chaque colonne (et revient à 0 si elle dépassse)
    while(false !== ($entry = readdir($handle))) {
		//On vérifie qu'il s'agit bien d'un fichier ou dossier
        if($entry != '.' && $entry != '..') {
			// On vérifie que ce n'est pas un dossier
            if(!is_dir($entry)) {
				// On vérifie qu'on est pas au nombre maximum d'images indiquée dans la configuration
            	if($i <= $max_images) {
					// On récupère l'image source
	            	$source = imagecreatefromjpeg($folder.$entry);
					// On récupère l'emplacement à l'aide d'un calcul
	            	$x = (($j * ($width_img + $border)) + $border);
	            	$y = (floor($i/$max_rows) * ($height_img + $border)) + $border;
					// On copie l'image à l'emplacement calculé avec les formats d'images souhaités
	            	imagecopyresampled($img, $source, $x, $y, 0, 0, $width_img, $height_img, $width_img_src, $height_img_src);
					// On incrémente la variable totale des fichiers
	            	$i++;
					// On incrémente la variable des colonnes
	            	$j++;
					// Si la variable des colonnes dépasse le nombre maximum, on redéfinie à 0 (retour à la ligne)
	            	if($j >= $max_rows) $j = 0;
	            }
            }
        }
    }
	// On ferme la lecture du dossier
    closedir($handle);
}

// On affiche l'image
imagepng($img);
// On détruit l'image
imagedestroy($img);

0 commentaire

Aucun commentaire ajouté, soyez le premier à donner votre avis !