Miniature des images vectorielles
This commit is contained in:
parent
9aa2536d89
commit
a5b00b32b9
148
core/core.php
148
core/core.php
@ -1243,66 +1243,94 @@ class common
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Création d'une miniature
|
* Crée une miniature à partir d'une image source.
|
||||||
* Fonction utilisée lors de la mise à jour d'une version 9 à une version 10
|
* Cette fonction prend en charge les formats raster (JPEG, PNG, GIF, WebP, AVIF) et vectoriels (SVG).
|
||||||
* @param string $src image source
|
* Pour les images vectorielles (SVG), aucune redimension n'est effectuée : une copie est réalisée.
|
||||||
* @param string $dets image destination
|
*
|
||||||
* @param integer $desired_width largeur demandée
|
* @param string $src Chemin de l'image source.
|
||||||
*/
|
* @param string $dest Chemin de l'image destination (avec le nom du fichier et l'extension).
|
||||||
function makeThumb($src, $dest, $desired_width)
|
* @param int $desired_width Largeur demandée pour la miniature (ignorée pour les SVG).
|
||||||
{
|
* @return bool True si l'opération a réussi, false sinon.
|
||||||
// Vérifier l'existence du dossier de destination.
|
*/
|
||||||
$fileInfo = pathinfo($dest);
|
function makeThumb($src, $dest, $desired_width)
|
||||||
if (!is_dir($fileInfo['dirname'])) {
|
{
|
||||||
mkdir($fileInfo['dirname'], 0755, true);
|
// Vérifier l'existence du dossier de destination.
|
||||||
}
|
$fileInfo = pathinfo($dest);
|
||||||
$source_image = '';
|
if (!is_dir($fileInfo['dirname'])) {
|
||||||
// Type d'image
|
mkdir($fileInfo['dirname'], 0755, true);
|
||||||
switch ($fileInfo['extension']) {
|
}
|
||||||
case 'jpeg':
|
|
||||||
case 'jpg':
|
$extension = strtolower($fileInfo['extension']);
|
||||||
$source_image = imagecreatefromjpeg($src);
|
$mime_type = mime_content_type($src);
|
||||||
break;
|
|
||||||
case 'png':
|
// Gestion des fichiers SVG (copie simple sans redimensionnement)
|
||||||
$source_image = imagecreatefrompng($src);
|
if ($extension === 'svg' || $mime_type === 'image/svg+xml') {
|
||||||
break;
|
return copy($src, $dest);
|
||||||
case 'gif':
|
}
|
||||||
$source_image = imagecreatefromgif($src);
|
|
||||||
break;
|
// Chargement de l'image source selon le type
|
||||||
case 'webp':
|
$source_image = '';
|
||||||
$source_image = imagecreatefromwebp($src);
|
switch ($extension) {
|
||||||
break;
|
case 'jpeg':
|
||||||
case 'avif':
|
case 'jpg':
|
||||||
$source_image = imagecreatefromavif($src);
|
$source_image = imagecreatefromjpeg($src);
|
||||||
}
|
break;
|
||||||
// Image valide
|
case 'png':
|
||||||
if (is_object($source_image)) {
|
$source_image = imagecreatefrompng($src);
|
||||||
$width = imagesx($source_image);
|
break;
|
||||||
$height = imagesy($source_image);
|
case 'gif':
|
||||||
/* find the "desired height" of this thumbnail, relative to the desired width */
|
$source_image = imagecreatefromgif($src);
|
||||||
$desired_height = floor($height * ($desired_width / $width));
|
break;
|
||||||
/* create a new, "virtual" image */
|
case 'webp':
|
||||||
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
|
$source_image = imagecreatefromwebp($src);
|
||||||
/* copy source image at a resized size */
|
break;
|
||||||
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
|
case 'avif':
|
||||||
switch (mime_content_type($src)) {
|
if (function_exists('imagecreatefromavif')) {
|
||||||
case 'image/jpeg':
|
$source_image = imagecreatefromavif($src);
|
||||||
case 'image/jpg':
|
} else {
|
||||||
return (imagejpeg($virtual_image, $dest));
|
return false; // AVIF non supporté
|
||||||
case 'image/png':
|
}
|
||||||
return (imagepng($virtual_image, $dest));
|
break;
|
||||||
case 'image/gif':
|
default:
|
||||||
return (imagegif($virtual_image, $dest));
|
return false; // Format non pris en charge
|
||||||
case 'image/webp':
|
}
|
||||||
return (imagewebp($virtual_image, $dest));
|
|
||||||
case 'image/avif':
|
// Image valide (formats raster uniquement)
|
||||||
return (imageavif($virtual_image, $dest));
|
if (is_resource($source_image) || (is_object($source_image) && $source_image instanceof GdImage)) {
|
||||||
}
|
$width = imagesx($source_image);
|
||||||
} else {
|
$height = imagesy($source_image);
|
||||||
return (false);
|
|
||||||
}
|
// Calcul de la hauteur proportionnelle à la largeur demandée
|
||||||
}
|
$desired_height = floor($height * ($desired_width / $width));
|
||||||
|
|
||||||
|
// Création d'une nouvelle image virtuelle redimensionnée
|
||||||
|
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
|
||||||
|
|
||||||
|
// Copie de l'image source dans l'image virtuelle avec redimensionnement
|
||||||
|
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
|
||||||
|
|
||||||
|
// Enregistrement de l'image redimensionnée au format approprié
|
||||||
|
switch ($mime_type) {
|
||||||
|
case 'image/jpeg':
|
||||||
|
case 'image/jpg':
|
||||||
|
return imagejpeg($virtual_image, $dest);
|
||||||
|
case 'image/png':
|
||||||
|
return imagepng($virtual_image, $dest);
|
||||||
|
case 'image/gif':
|
||||||
|
return imagegif($virtual_image, $dest);
|
||||||
|
case 'image/webp':
|
||||||
|
return imagewebp($virtual_image, $dest);
|
||||||
|
case 'image/avif':
|
||||||
|
if (function_exists('imageavif')) {
|
||||||
|
return imageavif($virtual_image, $dest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false; // En cas d'échec
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user