par
Ryle » 06 janv. 2021, 16:43
En fait la question à te poser c'est de savoir comment se passe l'ajout d'un nouveau lieu (et de l'image associé). Si tu intervient directement en base pour l'ajouter et via un logiciel FTP pour ajouter l'image, c'est plus complexe que si tu as un espace d'administration depuis lequel tu vas créer le lieu et charger l'image.
Dans le premier cas, bien qu'elle ne soit pas optimum, vérifier la présence d'une miniature et à défaut en générer une, peut convenir. Si en revanche tu un back office, c'est au moment de l'upload de la photo qu'il te suffit de créer la miniature à la volée.
Dans un cas comme dans l'autre, la procédure de création de la miniature reste la même. Il faut lire l'image d'origine, la réduire et l'enregistrer
// Chemins à adapter à ton contexte / rendre dynamique au besoin
$dirOrigine = "images/";
$dirVignettes = "vignettes/";
$fichier = "image.jpg";
// Dimensions de la vignette en pixels
$thumbWidth = 250;
$thumbHeight = 120;
// Lecture de l'image en supposant que ton image de base soit toujours un JPG
// Nota : si tu veux pouvoir utiliser des PNG ou autre, il faut tester le type de l'image et utiliser la fonction adaptée
$img = imageCreateFromJpeg($dirOrigine . $fichier);
// Détermine les dimensions de l'image d'origine
$imgWidth = imagesx($img);
$imgHeight = imagesy($img);
// Crée la future vignette avec TrueColor si GD2 est disponible, sinon tu peux utiliser ImageCreate()
$imgThumb = imageCreateTrueColor($thumbWidth, $thumbHeight);
// Redimensionne l'image d'origine,
imageCopyResized($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight);
// Sauvegarde de l'image dans le dossier vignettes
imageJpeg($imgThumb, $dirVignettes . $fichier);
// Libération de la mémoire
imageDestroy($imgThumb);
L'idée étant de le faire après avoir uploadé un fichier, ou dans ton code actuel, vérifier dans ta boucle avec file_exists si la vignette est déjà présente sur le serveur dans le dossier vignettes (elle aura le même nom que ton image grand format).
Si elle n'existe pas, tu la génères et tu n'as alors plus qu'à l'afficher à la place de ton image actuelle (en changeant simplement le nom du dossier dans lequel tu vas la chercher)
En fait la question à te poser c'est de savoir comment se passe l'ajout d'un nouveau lieu (et de l'image associé). Si tu intervient directement en base pour l'ajouter et via un logiciel FTP pour ajouter l'image, c'est plus complexe que si tu as un espace d'administration depuis lequel tu vas créer le lieu et charger l'image.
Dans le premier cas, bien qu'elle ne soit pas optimum, vérifier la présence d'une miniature et à défaut en générer une, peut convenir. Si en revanche tu un back office, c'est au moment de l'upload de la photo qu'il te suffit de créer la miniature à la volée.
Dans un cas comme dans l'autre, la procédure de création de la miniature reste la même. Il faut lire l'image d'origine, la réduire et l'enregistrer
[PHP]// Chemins à adapter à ton contexte / rendre dynamique au besoin
$dirOrigine = "images/";
$dirVignettes = "vignettes/";
$fichier = "image.jpg";
// Dimensions de la vignette en pixels
$thumbWidth = 250;
$thumbHeight = 120;
// Lecture de l'image en supposant que ton image de base soit toujours un JPG
// Nota : si tu veux pouvoir utiliser des PNG ou autre, il faut tester le type de l'image et utiliser la fonction adaptée
$img = imageCreateFromJpeg($dirOrigine . $fichier);
// Détermine les dimensions de l'image d'origine
$imgWidth = imagesx($img);
$imgHeight = imagesy($img);
// Crée la future vignette avec TrueColor si GD2 est disponible, sinon tu peux utiliser ImageCreate()
$imgThumb = imageCreateTrueColor($thumbWidth, $thumbHeight);
// Redimensionne l'image d'origine,
imageCopyResized($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight);
// Sauvegarde de l'image dans le dossier vignettes
imageJpeg($imgThumb, $dirVignettes . $fichier);
// Libération de la mémoire
imageDestroy($imgThumb);[/PHP]
L'idée étant de le faire après avoir uploadé un fichier, ou dans ton code actuel, vérifier dans ta boucle avec file_exists si la vignette est déjà présente sur le serveur dans le dossier vignettes (elle aura le même nom que ton image grand format).
Si elle n'existe pas, tu la génères et tu n'as alors plus qu'à l'afficher à la place de ton image actuelle (en changeant simplement le nom du dossier dans lequel tu vas la chercher)