Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRÉATION D'UNE IMAGE MINIATURE


Information sur la source

Catégorie :Graphique Classé sous : miniature, gd, image Niveau : Débutant Date de création : 20/02/2006 Vu : 10 670

Note :
7 / 10 - par 6 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

Description

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

  • <?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);
  • ?>
<?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
 

Commentaires et avis

signaler à un administrateur
Commentaire de GRenard le 22/02/2006 14:17:19

Ligne Inutile
$bgcolor=imagecolorallocate($src,255,0,0);

Le 2e paramètre est le font... seulement de 1 à 5 inclusivement
imagestring($src,10,2,($ym-20)/2,"FORMAT",$tcolor);

Pourquoi faire l'image résultante d'erreur la grandeur de l'image voulue ?

Des define pour les case 1: case 2: seraient appréciés.

signaler à un administrateur
Commentaire de Palleas_44 le 22/02/2006 15:40:59

Pourquoi faire l'image résultante d'erreur la grandeur de l'image voulue ?

Des define pour les case 1: case 2: seraient appréciés.

C'est à dire ? oO

signaler à un administrateur
Commentaire de darkduck le 25/02/2006 00:23:13

Bonjour, bon script surtout que j'en recherchais un (redimentionneur d'images) depuis longtemps.
Toutefois, il serait préférable de créer une fonction au lieu de récupérer des paramètres grâce à la fonction $_GET.
Lorsque je lance le script, la miniature est sauvegardée, mais j'obtiens le message suivant :
"L'image « http://darkduck/redim_img.php?img=test.jpg&xm=300&ym=300 » ne peut être affichée, car elle contient des erreurs."

Ce sera donc 7/10

signaler à un administrateur
Commentaire de Palleas_44 le 25/02/2006 00:30:15

7/10 ? pour une premiere source je suis assez content de moi merci :)

signaler à un administrateur
Commentaire de GRenard le 25/02/2006 05:42:32

L'image d'erreur... pas besoin d'être 300x300
case 1: case 2:... tu pourrais mettre des constantes et mettre case TYPE_GIF...

signaler à un administrateur
Commentaire de spycollege le 27/02/2006 12:58:20

de plus palleas, il aurait été intéressant de proposer une fonction qui conserve les proportions de l'image traitée... ca ne doit pas être très difficile à intégrer dans ta source, et ca mettrait vraiment un plus, car sur phpcs je n'ai encore vu aucune source qui le propose. Du coup, ta source (très bien par ailleurs, lol) vient s'ajouter à une liste assez longue... (d'ailleurs darkduck, tu n'as pas dû chercher bcp car il y en a une bonne dizaine de sources comme ca sur le site!)
@+^^

signaler à un administrateur
Commentaire de Palleas_44 le 27/02/2006 15:47:55

Qui conserve les proportions de l'image traitée ? mais elle le fait quand elle crée la miniature... Ou alors j'ai pas vraiment compris ce que tu voulais dire :$

signaler à un administrateur
Commentaire de spycollege le 01/03/2006 21:27:15

excuse-moi, l'erreur vient de moi, j'avais fait une combine avec un autre code qui aplatissait l'image... l'embrouille, quoi. :S
10/10 ;)

signaler à un administrateur
Commentaire de makaveli244 le 02/03/2006 14:50:07

bien fé

signaler à un administrateur
Commentaire de Palleas_44 le 02/03/2006 19:40:33

Merci =)

signaler à un administrateur
Commentaire de darkduck le 16/03/2006 21:25:44

J'ai modifié et optimisé le script en en faisant une fonction (c'est plus pratique je trouve pour l'utilisation). Cette fonction se contacte de, si tout se passe bien, sauvegarder l'image miniature dans un répertoire au choix, on peut choisir les dimensions, le préfixe et même si le fichier original doit être supprimé.
Pour ma part j'utilise cette fonction après un upload et c'est vraiment très pratique !

Voici la fonction :

function make_miniature($img, $max_width=400, $max_height=400, $repertoire_destination='./', $prefixe='mini-', $supprimer_original=false)
{
/*Fonction qui créer la mimiature d'une image.
Retourne true si la miniature a bien été créée, un message d'erreur sinon

Liste des paramètres :
- $img : Chemin relatif du répertoire dans lequel se trouve l'image originale
- $max_width : Largeur maximale pour la miniature
- $max_height : Hauteur maximale pour la miniature
- $repertoire_destination : Répertoire dans lequel doit être sauvegardée la miniature
- $prefixe : Préfixe donné à la miniature (Ex : "ma-photo.jpg" devient "mini-ma-photo.jpg"
- $supprimer_original : Si est égal à true on supprime l'image originale

/*Initialisations*/
$reussi = false;
$message = '';

/*on ouvre le fichier*/
$file = fopen($img,'r');

if ($file !== false) //Le fichier existe
{
/*On recupere le nom de l'image*/
$nom = $prefixe.basename($img);

/*getimagesize() renvoie FALSE si le fichier n'est pas une image*/
if (false !== list($largeur_orig,$hauteur_orig,$extension) = getimagesize($img))
{
/*On récupère l'extension de l'image*/
$extension_img = substr(strchr($img,'.'),1);

/*On vérifie que le fichier soit bien au format jpg, gif ou png*/
if(ereg('(jpeg|jpg|gif|png)$',$extension_img))
{
switch ($extension)
{
case 1: // GIF
$type_img = imagecreatefromgif($img); break;
case 2: //JPEG
$type_img = imagecreatefromjpeg($img); break;
case 3: // PNG
$type_img = imagecreatefrompng($img); break;
}


/*On verifie la taille*/
if(($largeur_orig > $max_width) || ($hauteur_orig > $max_height))
{
// si l'image est trop large ou trop haute
if ($largeur_orig > $hauteur_orig)
{
// image plus large que haute
$hauteur = round(($hauteur_orig * $max_width) / $largeur_orig);
$largeur = $max_width;
}
else
{
// image plus haute que large
$hauteur = $max_height;
$largeur = round(($largeur_orig * $max_height) / $hauteur_orig);
}
}
else
{
$largeur = $largeur_orig;
$hauteur = $hauteur_orig;
}

/*On créer la miniature*/
$src = imagecreatetruecolor($largeur,$hauteur);
imagecopyresized($src,$type_img,0,0,0,0,$largeur,$hauteur,$largeur_orig,$hauteur_orig);

/*On sauvegarde la miniature*/
imagejpeg($src, $repertoire_destination.$nom);

/*On libere la memoire utilisée par cette image.*/
imagedestroy($src);

/*On supprime éventuellement l'image originale*/
if ($supprimer_original === true)
unlink($img);
}
else
{
$message = 'Erreur : L\'extension de l\'image est '.$extension_img.' ! Elle devrait être JPG, JPEG, GIF ou PNG';
}
}
else
{
$message = 'Erreur : Le fichier n\'est pas une image !';
}
}
else
{
$message = 'Erreur : Le fichier n\'existe pas !';
}

if ($reussi)
return true;
else
return $message;

}

signaler à un administrateur
Commentaire de PyRuSs le 26/06/2006 12:05:25

j'ai pas tout compris au code, mais il doit y avoir une erreur kkpart, ou alors le dossier destination n'est pas cree automatiquement?
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?

signaler à un administrateur
Commentaire de PyRuSs le 26/06/2006 12:37:47

ok, ne cherchez plus! ^^

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)

signaler à un administrateur
Commentaire de theroman le 28/06/2006 12:31:44

moi je met 9/10

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

signaler à un administrateur
Commentaire de webdeb le 18/10/2006 12:45:29

Pour récupérer une extension :

<?php
$chaine = 'monTruc.png';
echo strtolower(pathinfo($chaine, PATHINFO_EXTENSION));
?>

++

signaler à un administrateur
Commentaire de tely33 le 23/01/2007 10:02:13

Salut,

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 ?

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

générer des miniatures avec gd 1.6 [ par vegetaline ] muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave Copyright image [ par kimengumi ] BonjourJ'ai bien aimé le script de webdesignasp pour écrire un copyright sur les images.En fait, j'enregistre l'image telle quelle sur mon serveur et texte sur image... librairie GD ? [ par ozitoun ] Bonjour bonjour,voili voilou, je cherche à mettre une texte sur une image (jpeg).j'ai essayé les imagestring, imagechar... mais à chaque fois les exem Couper le bas d'une image (GD PHP) [ par dezeque ] bonjour,j'aimerai savoir comment faire pour couper le bas d'une image ?elle fais 600X800 et j'aimerai enlver les 50 dernirers pixels du bas pour quell Problème d'affichage avec la libraire GD [ par CMOIPOPO ] Salut &#224; tous,Je souhaite dessiner tout b&#234;tement un rectangle en php (je travaille en local)&nbsp;&#224; l'aide de la libraire GD. Pour cela, Liens PHP (appel d'un fichier PHP) [ par vincf1 ] Bonjour à tous tout d'abord Voila, j'explique mon petit soucis (je suis novice en PHP ).Mon but est d'afficher une image miniat Où est l'érreur ? (Image Miniature) [ par ImmortalPC ] Salut, apr&#232;s avoir cherch&#233; une solution pour faire une image miniature en automatique j'ai finalement trouv&#233; un script super Voici le s [BLOB->GD] Redimensionner un "flux image binaire"... [ par arnal69130 ] Bonjour &#224; tous,Je cherche &#224; faire une page pour afficher la carte d'identit&#233; d'un "agent", pour simplifier disons juste son nom et sa p Librairie GD, Besoin d'aide !!! [ par Astalavista ] &nbsp;&nbsp;&nbsp; Bon, je post ca, car je n'arrive pas a trouver ... :( Je cherche un moyen de fair un Stretch sur une image, C'est a dir de deformer Librairie GD [ par Stephan45120 ] J'orai besoin de superposer 2 images. La première en arrière plan et l'autre en calque par dessus(transparente à certain endroit). Ce que je veux arri


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.