Pourquoi tout d'un coup : ça va bouffer un maximum de ressources en très peu de temps... pour peu de chose en fait. En les laissant se régénérer au fur et à mesure des demandes, tu ne consommes pas trop de ressources serveur et l'autre avantage est que si tu rajoutes une image dans ta base, le script sera déjà en place pour en créer la miniature si besoin est, et ce automatiquement.En fait pour la génération de miniature, je pensais supprimer les anciennes miniatures, toute façon elles ne sont pas proportionnelles.
Et ensuite les refaire toute en même temps.
Ça, c'est une très mauvaise idée et si ça peut simplifier le développement, ça n,est qu'en apparence parce que ça veut dire que tu vas générer des miniatures qui ont une taille fixe avec un fond à l'intérieur duquel va se mettre l'image ré-échantillonnée proportionnellement.question simple, réponse compliqué...
Donc pour confimer l'exception de cette règle
je mets les mesure en html
ex:echo '<img src="'.$img.'" alt="'.$description.'" height="100px" width="100px" />';
Code : Tout sélectionner
tu vas générer des miniatures qui ont une taille fixe avec un fond à l'intérieur duquel va se mettre l'image ré-échantillonnée proportionnellement
$t_width_max = 200;
$t_height_max = 150;
que tu fasses un ratio des dimensions originales
list($width_orig, $height_orig) = getimagesize($fileTmpPath); // $fileTmpPath est ton image
$ratio_orig = $width_orig/$height_orig;
et ensuite il faut calculer les dimensions de la miniature en fonction de si elle est plus haute que large ou l'inverse. Et aussi prendre en compte le cas ou l'image de base est plus petite que la miniature donc :
if($width_orig < $t_width_max && $height_orig < $t_height_max) {
$t_height = $height_orig;
$t_width = $width_orig;
} elseif($height_orig > $width_orig) {
$t_ratio = $height_orig / $t_height_max;
$t_height = $t_height_max;
$t_width = $width_orig / $t_ratio;
} else {
$t_ratio = $width_orig / $t_width_max;
$t_width = $t_width_max;
$t_height = $height_orig / $t_ratio;
}
et enfin tu créé ta miniature ici $t_filePath est la destination finale pour créér ta miniature $extension = strtolower(substr(strrchr($fileTmpPath, '.'), 1));
$t_image_p = imagecreatetruecolor($t_width, $t_height);
$t_quality = 80;
switch($extension)
{
case 'jpeg':
case 'jpg':
$t_image = imagecreatefromjpeg($fileTmpPath);
imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
imagejpeg($t_image_p, $t_filePath, $t_quality);
break;
case 'png':
$t_image = imagecreatefrompng($fileTmpPath);
imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
imagepng($t_image_p, $t_filePath, $t_quality);
break;
case 'gif':
$image = imagecreatefromgif($fileTmpPath);
imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
imagegif($t_image_p, $t_filePath, $t_quality);
break;
}
tu peux changer la qualité avec la variable $t_quality cependant 80 reste très correcte, si tu dois changer pour une miniature descend plutot cette valeur qu'autre chose
Je parlais juste d'une solution rapide pour le concepteur du site pour rattraper le coup si le mal était déjà fait avec 500 thumbnails déjà en ligne et qu'il faut remplacer.Le code calculant les dimensions du thumbnail en fonction du ratio de l'image originale est vraisemblablement la meilleure solution lors de l'upload d'une image.
Oui j'utilise un script très semblable au tiens pour un redimensionnement lors de l'upload http://www.phpfrance.com/forums/voir_re ... php#266544L'astuce photoshop c'est pas forcement la meilleure du tout!
Imagine que tu as d'autres fichiers qui prennent du poids dans tes dossiers ? tels que des vidéos?
Et puis le script de miniaturisation faut le faire dans tous les cas pour quand l'utilisateur upload une photo