begin process at 2010 03 21 11:34:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > CRÉATION DE MINIATURE D'UNE IMAGE

CRÉATION DE MINIATURE D'UNE IMAGE


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :image, miniature, gd2, réduire Niveau :Débutant Date de création :24/11/2007 Date de mise à jour :26/11/2007 09:54:40 Vu / téléchargé :9 245 / 327

Auteur : waterw72

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

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

  • <?
  • /**
  • * @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";
  • }
  • ?>
<?
	/**
	* @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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

25 novembre 2007 17:01:48 :
Deuxième version de cette fonction en tenant compte des commentaires... (commentaire, test si fichier existant)
25 novembre 2007 17:03:20 :
Deuxième version de cette fonction en tenant compte des commentaires (commentaires explicatif, test du fichier existant).
26 novembre 2007 09:54:40 :
mise à jour en fonction des conseils de malalam

 Sources du même auteur

Source avec Zip Source avec une capture UNE CLASS SITEMAP POUR AFFICHER L'ARBORESCENCE DE VOTRE SITE...
CLASS E-MAIL
ENREGISTRER UNE IMAGE D'UN SITE DISTANT
Source avec Zip Source avec une capture FUNCTION CAPTCHA
Source avec Zip Source avec une capture CLASS WEBMAIL

 Sources de la même categorie

Source avec une capture DES HISTOGRAMES , CAMEMBERT 3D ET ÉCLATÉS CRÉÉ AU VOL EN PH... par zozo14
AJOUTER UN ARRIÈRE PLAN SUR UNE IMAGE par digitaldax
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
Source avec Zip RECHERCHE DE MOTIF DANS UNE IMAGE par ParseError
BARRES PARAMÉTRABLES EN DÉGRADÉ DE COULEUR ET AVEC TEXTE DA... par hornetbzz

 Sources en rapport avec celle ci

Source avec Zip CLASSE : GÉNÉRATEUR DE MINIATURE STRICTE OPTIMISÉ par GauldoMagique
Source avec Zip Source avec une capture CLASSE LECTUREENLIGNE - POUR LES SITES DE SCANTRAD OU ... par tiger222
Source avec Zip CRÉATION D'UNE MINIATURE AVEC UNE LARGEUR OU UNE HAUTEUR MAX... par medium69
CRÉER UNE MINIATURE LIMITÉE EN SURFACE (ET PAS EN DIMENSIONS... par MadM@tt
Source avec une capture FONCTION MINIATURISATION par Piolo

Commentaires et avis

Commentaire de codefalse le 24/11/2007 21:26:59 administrateur CS

J'aurai quelques points à dire à propos de ta source :

Tout d'abord, teste ce qui est mis en paramètres : si c'est une chaine de caractères, un boolean (ce que tu devrait mettre pour le dernier paramètre, plutot que 1 ou 0), etc.

Ensuite, l'algorithme n'est pas très bien posé, tu test si tu peux écraser avant de tester si le fichier existe, par exemple. Teste déjà si le fichier existe, ensuite, si oui, si tu peux l'écraser.

Un truc agréable, c'est de nommer plus précisément des variables, tel que
$sPath pour indiquer que la variable $sPath est un String contenant une Adresse (tu peux dire $sPathImageDest ou un truc du genre)

Avant de genrer tes images, verifier si la librairie gd est installée serait un mieux (tu teste l'existence une fonction spécifique à la gd)
Un autre point qui m'intéresserait, si je voulais utiliser ton script, c'est de choisir l'extension.
Là, tu nous impose du jpeg. Et si je veux du png ?
Par ailleur, on ne peux choisir la taille de la miniature. Tu spécifie une taille max, que ce soit en longueur ou en largeur. Ce serait bien de choisir quel partie on veut retrécir au max (je veux une largeur de x max, mais peu importe la hauteur ! :p)

Au vue des commentaires d'indication, tu veux t'approcher d'une documentation à la style phpdoc. Regarde comment cela est fait :

/**
* @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.
*/

Enfin voila, quelques points à corriger et ca deviendra intéressant :)
J'attends la nouvelle mise à jour, donc pour l'instant je ne mettrait pas de notes.

Courage :)

Commentaire de Teclis01 le 25/11/2007 02:44:08

Euh problème !!!
J'adhère a ce que dit codefalse néanmoins je vais essayer d'apporter 2/3 choses en plus.
Déjà cette source n'est pas de niveau initié (a voir si elle le devient)
Ensuite renseigne toi sur les fonction variable... ça pourrait t'aider à resoudre quelques problèmatique (http://www.manuelphp.com/php/functions.variable-functions.php)
Une fonction oui ... mais pourquoi pas une classe ?
Le typage evidement... ça evitera d'ecrire des choses dans ce goût là ...
if ($width && ($width_orig < $height_orig)) {
Voilà ... En esperant que cette source s'améliore et en te souhaitant bonne continuation

Commentaire de coucou747 le 25/11/2007 15:58:12

Une fonction oui ... mais pourquoi pas une classe ? => nan pas une class pour ca... ou alors tu fais une class ImageHandler qui t'abstrait de gd...

nan moi par contre je suis contre le manque de flags... tu devrais en avoir pour beaucoup plus de choses... genre garder la proportionalite, l'appliquer par defaut, par exes, etc...

Commentaire de codefalse le 25/11/2007 16:53:52 administrateur CS

a la rigueur cette fonction aura sa place dans une classe de type upload par exemple :)
Et carrément plus de flags oué ! C'est ce qui permet la modularité d'une fonction :)

Commentaire de waterw72 le 25/11/2007 16:58:57

Pour information, cette fonction est utlisée par une autre fonction listant
le contenu d'un répertoire (à la recherche d'image afin de les afficher en
miniature).
Bon, je fais une classe Image ou pas?

Commentaire de neigedhiver le 25/11/2007 17:57:50

Salut,

C'est intéressant tout ça. J'aimerais réagir sur certains points.

CodeFalse: "Avant de genrer tes images, verifier si la librairie gd est installée serait un mieux (tu teste l'existence une fonction spécifique à la gd)"

extension_loaded() permet de savoir si une extension est chargée ou non...
Quand on sait que GD est chargée, on peut aussi vérifier sa version avec gd_info() ... Ca dépend des fonctions utilisées et des formats de fichiers traités.

Concernant la question d'en faire une classe ou pas, moi je vote pour. Ce serait plus joli.
Comme le dit Coucou747, une classe qui permet de s'abstraire de GD. Comme on s'abstrait de MySQL ou PostgreSQL, ou autre.
On pourrait avoir une classe abstraite ImageHandler, et des classes concrètes suivant qu'on utilise GD, ImageMagick, ou autre (y'en a surement d'autres en plus).
Et puis des classes pour les différents formats de fichiers (gif, jpeg, png, et pourquoi pas ico ou autre).
Une classe miniature qui serait une classe étendue de la classe Image, et qui se construirait à partir d'un objet image (la source à redimensionner).
La classe miniature pourrait accepter en paramètre des formats prédéfinis dans un fichier xml, ce qui permettrait avec le même objet de faire plusieurs miniatures d'une même images, mais de tailles différentes (une taille pour une mosaique, une pour un disporama, sans toucher à la taille d'origine).

waterw72 :"Pour information, cette fonction est utlisée par une autre fonction listant le contenu d'un répertoire (à la recherche d'image afin de les afficher en miniature)."

Ca c'est un petit truc qui me gêne... Enfin... En programmation procédurale, non, mais si tu veux faire une classe, tu ferais mieux d'avoir un itérateur avec filtre sur un répertoire, qui permet de ne récupérer que les images.
C'est une classe très simple à écrire et qui permet de récupérer les images d'un répertoire (éventuellement de manière récursive) avec 3 lignes de code.

Avec quelques classes bien faites, redimensionner une image se fera en 2 lignes. Combiné à la source de malalam pour les traitements de masse trop long pour le temps d'exécution de php, ça pourrait donner une très bonne base de galerie photo...

Commentaire de malalam le 25/11/2007 19:46:57 administrateur CS

Hello,

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.

Commentaire de neigedhiver le 25/11/2007 19:55:44

Ben on est 3 du même avis alors.

Commentaire de coucou747 le 25/11/2007 19:57:28

ouais, je suis d'accord avec malalam : moi aussi je suis d'accord avec Coucou sur ce coup-là. et peut-etre meme sur les autres coups

Commentaire de naej56 le 10/03/2008 20:35:14

bonjour a tous.
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.

Commentaire de Villa Flore le 26/04/2008 02:55:42

NON AFFICHAGE DES MINIATURES

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).


 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 Réduire une image on-line [ par arickx ] Salut,Je cherche un moyen de réduire les dimensions ainsi que le poids (pex : de 300ko à 30ko) d'une image au moment de l'upload sur mon site, le tout 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 Réduire la taille d'une image puis la sauvegarder réduite [ par Animax77 ] Je suis en train de faire un site dont le principe est d'uploader des dessins pour les partager. ( je fais un peu de pub en passant ^^, il est ici, ma Création de miniature lors de l'upload d'une image [ par jizz666 ] Hello, Je suis actuellement entrain de cr&#233;er un album photo en PHP/MySQL. Mais j'ai un petit probl&#232;me, je n'arrive pas &#224; cr&#233;er l Miniature image [ par Clad49 ] Salut ! Je me gal&#233;re a trouver un fonction qui permet de cr&#233;&#233; une miniature de fichier !une simple ou l'on indique kel fichier on veut Réduire la taille et par conséquent le poids d'une image avec la lib GD [ par BenXbox ] Salut à tous, Voila je voudrais savoir comment faire pour réduire la taille et par conséquent le poids d'une image avec la lib GD au moment de l'affi Petit probleme avec une fonction, PHP [ par rouliendelavegas ] Bonjour,J'explique une peu cke fait le scriptj'ouvre un dossier "galerie/"dans ce dossier, j'ouvre un repertoire à la foidans le repertoire ouvert je problème gd2 [ par moi zork ] bonsoir à tous , Je viens de me mettre au image php avec la librairie GD sauf que j'ai un petit probleme voila mon script :&lt;?phpheader ("Content-ty Supprimer une image du cache?? Forcer le rechargement? [ par zut69 ] <td id="HB_Focus_Element" unselec


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales