De nombreux sites ont besoin de créer une image miniature pour par exmpple dans le cas de forumsn ne pas deformer le design ou dans le cas des galleries pour afficher un apercu de l'image.
Source / Exemple :
<?php
/*
Script réalisé par PALLEAS palleas@hotmail.fr
Aide :
3 valeurs sont passées dans l'url :
-$img : la source de l'image
-$xm : largeur maximale de l'image soit la largeur de la miniature créée
-$ym : hauteur maximale de l'image soit la hauteur de la miniature créée
// debut du script
/* si aucune dimension n'est soumise :
on definit les dimensions par défaut.*/
if(isset($_GET['xm']) && !empty($_GET['xm'])) {
$xm=$_GET['xm'];
} else {
$xm=100;
}
if(isset($_GET['ym']) && !empty($_GET['ym'])) {
$ym=$_GET['ym'];
} else {
$ym=100;
}
// on ouvre le fichier
$file=@fopen($_GET['img'],'r');
// s'il n'est pas ouvert
if(!$file) {
$src=imagecreatetruecolor($xm,$ym);
$bgcolor=imagecolorallocate($src,255,0,0);
$tcolor=imagecolorallocate($src,255,0,0);
imagestring($src,10,2,($ym-20)/2,"IMAGE",$tcolor);
imagestring($src,10,2,($ym+20)/2,"INTROUVABLE",$tcolor);
} else {
// s'il est ouvert
// on recupere le nom de l'image
$nom = 'mini_'.basename($_GET['img']);
// getimagesize() renvoie FALSE si le fichier n'est pas une image
// s'il renvoie false
if(!list($largeur_orig,$hauteur_orig,$ext) = getimagesize($_GET['img'])) {
$src=imagecreatetruecolor($xm,$ym);
$bgcolor=imagecolorallocate($src,255,0,0);
$tcolor=imagecolorallocate($src,255,0,0);
imagestring($src,10,2,($ym-20)/2,"FORMAT",$tcolor);
imagestring($src,10,2,($ym+20)/2,"INCORRECT",$tcolor);
} else {
// s'il renvoie true
// si le fichier est bien au format jpg, gif ou png :
if(ereg('(jpeg|jpg|gif|png)$',$_GET['img'])) {
// begin switch
switch ($ext) {
case 1: // GIF
$im=imagecreatefromgif($_GET['img']);
break;
case 2: //JPEG
$im=imagecreatefromjpeg($_GET['img']);
break;
case 3: // PNG
$im=imagecreatefrompng($_GET['img']);
break;
}
// fin switch
// on verifie la taille
if($largeur_orig>$xm || $hauteur_orig>$ym) {
// si l'image est trop large ou trop haute
if ($largeur && ($largeur_orig > $hauteur_orig)) {
// image plus large que haute
$hauteur = ($hauteur_orig * $xm)/$largeur_orig;
$largeur=$xm;
} else {
// image plus haute que large
$hauteur = $ym;
$largeur = ($largeur_orig *$ym)/$hauteur_orig;
}
} else {
$largeur=$largeur_orig;
$hauteur=$hauteur_orig;
}
// on calcule position de l'image
$py=($ym-$hauteur)/2;
$px=($xm-$largeur)/2;
// on crée une image noir (fond si jamais l'image est plus petite que le cadre)
$src = imagecreatetruecolor($xm,$ym);
$black= imagecolorallocate($src,0,0,0);
imagecopyresampled($src,$im,$px,$py,0,0,$largeur,$hauteur,$largeur_orig,$hauteur_orig);
} else {
// si l'image est au mauvais format
$src=imagecreatetruecolor($xm,$ym);
$bgcolor=imagecolorallocate($src,255,0,0);
$tcolor=imagecolorallocate($src,255,0,0);
imagestring($src,10,2,($ym-20)/2,"FORMAT",$tcolor);
imagestring($src,10,2,($ym+20)/2,"INCORRECT",$tcolor);
}
}
}
// on definit l'en-tete
header ("Content-type: image/png");
// dossier de l'image (UNIQUEMENT SI SAUVEGARDE) :
// $dossier="images/minis/";
// imagepng($src,$dossier.$nom);
// enlever les commentaires d'au dessus si jamais on veut sauvarder l'image
// on crée l'image si l'on veut l'afficher.
imagepng($src);
// on libere la memoire utilisée par cette image.
imagedestroy($src);
?>
Conclusion :
Voila c'est la première source que je poste ici, elle surement optimisable et d'ailleur j'attend toutes vos remarques mais soyez pas trop mechant ok ? :P
23 janv. 2007 à 10:02
J'ai un petit probleme concernant la partie switch($ext) puisque si mon image dépasse les 700ko environ, elle n'est pas crée. Sinon ça marche en dessous de cette taille (aucun msg d'erreur mais j'ai compris que le pb venait de là). Apperment c'est un probleme de mémoire mais existerait-il une manière de modifier le code pour que cela marche ?
18 oct. 2006 à 12:45
<?php
$chaine = 'monTruc.png';
echo strtolower(pathinfo($chaine, PATHINFO_EXTENSION));
?>
++
28 juin 2006 à 12:31
po mal du.
ca te gene pas si je pique une partie pour l'integrer a un scripte qui affiche toute les image d'un dossier tout en creant des miniature (maintenent) et qui donne la posibiliter de laisser des commentaire et de voir l'original biensure.
et si ca tente quelqu'un romain@theroman.be
je le poste po vu le nombre effrayent de source a ce sujet
26 juin 2006 à 12:37
alors en fait, je conseil une petite modif lors de l'extraction de l'extention du fichier:
$extension_img = strtolower(substr(strchr($img,'.'),1));
En effet le probleme venai du fait que mes extentions a moi sont en MAJ... ^o)
26 juin 2006 à 12:05
En faisant ca:
make_miniature(const_root . $p . $read_file, 200, 150, const_root . $p . '/mini/', 'mini_', false)
J'ai bien une reponse "Vrai" mais je ne trouve mes images nul part...
des infos?
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.