Cette fonction enregistre une miniature d'une image.
Les paramètres sont :
- le chemin complet de l'image source.
- le répertoire de destination de l'image réduite.
- la taille maximale de l'image réduite.
- le nom de l'image réduite.
- un flag pour écraser ou pas l'image réduite si elle existe déjà.
Source / Exemple :
<?
/**
- @name miniature
- Créer une miniature d'une image donnée et en retourne l'adresse.
-
- @param String sPathFrom : Répertoire d'origine
- @param String sPathTo : Répertoire de destination
- @param String integer iMaxDimension : Taille maximale de la miniature
- @param boolean bOverwrite : Ecraser la miniature si elle existe
*
- @return String Adresse de la miniature nouvellement crée.
- /
function miniature ($sPathFrom, $sPathTo, $iMaxDimension, $sNameImage, $bOverwrite=false)
{
//test des paramètres
try {
if (!is_string($sPathFrom) )
throw new Exception ('erreur : miniature(). sPathFrom must be a string');
if (!is_string($sPathTo) )
throw new Exception ('erreur : miniature(). sPathTo must be a string');
if (!is_int($iMaxDimension) )
throw new Exception ('erreur : miniature(). iMaxDimension must be a numeric');
if (!is_string($sNameImage) )
throw new Exception ('erreur : miniature(). sNameImage must be a string');
if (!is_bool($bOverwrite) )
throw new Exception ('erreur : miniature(). bOverwrite must be a boolean');
}
catch (Exception $e) {
echo $e->getMessage()."\n";
return false;
}
// fin test des paramètres
//répertoire de l'image
$dir_img = substr($sPathFrom, 0, strrpos($sPathFrom, "/")+1);
//test si le fichier existe et qu'on écrase OU que le fichier n'existe pas.
if((file_exists($sPathTo.$sNameImage) && true === $bOverwrite) || !file_exists($sPathTo.$sNameImage)) {
//Largeur et hauteur des miniatures
$width = $iMaxDimension;
$height = $iMaxDimension;
// Calcul des nouvelles dimensions en gardant les proportions
list($width_orig, $height_orig) = getimagesize($sPathFrom);
if ($width && ($width_orig < $height_orig))
$width = ($height / $height_orig) * $width_orig;
else
$height = ($width / $width_orig) * $height_orig;
// création d'une image vierge
$mini = @ImageCreateTrueColor($width, $height)
or die ("Impossible de crée un flux d'image GD");
//On ressample l'image initiale pour en créer une copie en miniature
$imgSrc = imagecreatefromjpeg($sPathFrom);
ImageCopyResampled($mini, $imgSrc, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
//On enregistre l'image dans le répertoire des miniatures
if (!file_exists($sPathTo) ) {
mkdir($sPathTo);
chmod ($sPathTo, 0764);
}
imageJpeg($mini, "".$sPathTo.$sNameImage.".jpg");
}
return $sPathTo.$sNameImage.".jpg";
}
?>
Conclusion :
Première source alors soyez indulgant... svp
26 avril 2008 à 02:55
Bonjour et merci pour ce code ... et merci à tous les codes qui m'ont aidé à monter mon site.
J'ai donc utilisé ce code pour créer des miniatures à mes albums de photos en les mettant dans un sous répertoire.
Quand j'ouvre mon album, les miniatures doivent s'afficher et en cliquant dessus, l'original apparait dans sa grande dimension.
CEPENDANT, les miniatures ne s'affichaient pas. Juste le texte alternatif du "alt".
Après bien des recherches sur Google (dieu, puisqu'il répond à tout), je suis arrivé à la REPONSE.
Il s'agit de CHMOD()
Le code proposé par défaut est 764
Or il ne permet pas au "public" d'exécuter ce répertoire.
Il a donc fallu le changer en 755
Maintenant les miniatures s'affichent correctement et en cliquant dessus, l'original apparait dans sa grande dimension.
Pour plus de précisions :
http://fr.wikipedia.org/wiki/Chmod explique parfaitement la composition des codes.
http://www.raynette.fr/script-gratuit/aide-chmod.php donne le mode opératoire du paramétrage sur Filezila (ou autre).
10 mars 2008 à 20:35
Je suis un débutant (très débutant) et j'ai utiliser ce bout de code pour créer mes miniatures.
<?php
$img_src = 'image.jpg';
$img_dst = "miniature/miniature_$img_src";
header('Content-type: image/jpeg');
list($width, $height) = getimagesize($img_src);
$newwidth = 100;
$newheight = ((((100*$newwidth)/$width)*$height)/100);
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($img_src);
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($thumb);
imagejpeg( $thumb, $img_dst, 100);
?>
Je ne sais pas si c'est vraiment la même chose que le code proposé par waterw72 (je ne comprend pas tout ce qu'il a fait je ne suis pas encore au point) mais au final ce bout de code me donne bien une miniature de l'image de départ en conservant les proportions.
Je voudrais bien savoir si ce code est a peu près correct.
Merci d'avance pour vos réponses.
25 nov. 2007 à 19:57
25 nov. 2007 à 19:55
25 nov. 2007 à 19:46
ben moi je suis d'accord avec Coucou sur ce coup-là. On a un code qui fait du redimensionnement, c'est tout. Certes l'algo n'est pas terrible et devrait être amélioré. Oui ça manque d'options. Mais ça reste un script de redimensionnement d'images...une classe pour ça, ce serait déplacé.
Alors si on se fend d'un gros package de traitement des images, là ok, en effet. Mais si c'est juste pour faire du redimensionnement, une fonction c'est très bien.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.