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 !

REDIMENSIONNEMENT AUTOMATIQUE D'IMAGES


Information sur la source

Catégorie :Astuces Classé sous : redimmenssionement, miniature, image, automatique, fonction Niveau : Débutant Date de création : 25/04/2007 Date de mise à jour : 26/04/2007 03:20:12 Vu : 10 548

Note :
5,17 / 10 - par 6 personnes
5,17 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

La création de miniatures est souvent synonyme de difficulté pour les codeurs débutants.
Sachant que j'en suis presque un, je me suis penché sur une fonction toute simple, qui ni ne crée pas d'image supplémentaire, ni n'utilise la librairie GD ; le bohneur quoi.

Cette fonction je l'utilise dans mon fichier fonction.inc.php que j'inclus sur toutes les pages donc la fonction doit être accessible au moins sur la page ou vous voullez afficher votre miniature...

Les paramètres sont les suivant :

- $img : chemin de l'image (uploads/avatars/image.gif)
- $w_max : Largeur maximale que vous envoyez sous forme de chiffre
- $h_max : Hauteur maximale


Sans plus tarder, voici le code.

EDIT : Calcul du rapport
 

Source

  • function redimenssion($img, $w_max, $h_max){
  • $size_img = getimagesize($img); // Dimensions de l'image de base
  • $w_img = $size_img[0]; // Largeur de l'image de base
  • $h_img = $size_img[1]; // Hauteur de l'image de base
  • $rapport = $w_max / $w_img; // Rapport
  • $w_final = ceil($w_img * $rapport); // Largeur miniature arrondie
  • $h_final = ceil($h_img * $rapport); // Hauteur miniature arrondie
  • $size_final = array($w_final, $h_final); // Mise en tableau des dimensions finales
  • return $size_final; // On retourne les dimensions de la miniature sous forme de tableau
  • }
  • $mini_img = redimenssion('uploads/avatars/image.gif', 100, 100); // Appel de la fonctions
  • <img src="'.$img.'" width="'.$mini_img[0].'" height="'.$mini_img[1].'" alt="" />
function redimenssion($img, $w_max, $h_max){

	$size_img = getimagesize($img);		// Dimensions de l'image de base
	
	$w_img = $size_img[0];				// Largeur de l'image de base
	$h_img = $size_img[1];				// Hauteur de l'image de base
	
	$rapport = $w_max / $w_img;		// Rapport
	
	$w_final = ceil($w_img * $rapport);		// Largeur miniature arrondie
	$h_final = ceil($h_img * $rapport);		// Hauteur miniature arrondie
	
	$size_final = array($w_final, $h_final);	// Mise en tableau des dimensions finales
	
	return $size_final;	// On retourne les dimensions de la miniature sous forme de tableau

}


$mini_img = redimenssion('uploads/avatars/image.gif', 100, 100);    // Appel de la fonctions

<img src="'.$img.'" width="'.$mini_img[0].'" height="'.$mini_img[1].'" alt="" />

Historique

26 avril 2007 03:20:12 :
Changement de calcul du rapport

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 25/04/2007 19:46:35

$rapport = (($w_max / $w_img) + ($w_max / $w_img)) / 2; // Rapport
lol

quand au
<img src="'.$img.'" width="'.$mini_img[0].'" height="'.$mini_img[1].'" alt="" />

le width et height c'est sans interret...

signaler à un administrateur
Commentaire de GanJasTeR le 25/04/2007 20:31:36

Tu pourrais être plus explicite qu'un simple lol ? Si tu ne comprend pas mon calcul relie tes cours de maths de 6°...

Et je me cassais la tête pour trouver un moyen de redimenssioner mes images sans les déformer en écrivant le moins de choses possibles.

Après niveau optimisation et chargement de la page ce n'est sûrement pas ce qu'il y a de mieux... Mais c'est Simple !

signaler à un administrateur
Commentaire de coucou747 le 25/04/2007 20:40:21

$rapport = $w_max / $w_img; serait plus adapte non ?

signaler à un administrateur
Commentaire de GanJasTeR le 25/04/2007 20:47:46

Dans la première version j'avais fait le rapport de cette façon uniquement sur la largeur.
Le problème est que pour une photo en portrait le rapport de la longueur n'est pas totalement bon pour la hauteur.

Le calcul que je fais est pour trouver le milieu entre les 2 rapports afin d'avoir une taille finale plus équilibrée. Sur des miniatures du genre 100*100, un seul rapport suffit on ne voit pas trop la différence mais sur des plus grosses miniatures (300*300) ça déforme pas mal.

signaler à un administrateur
Commentaire de coucou747 le 25/04/2007 20:58:58

(a+a)/2 = a...

enfin tu en penses ce que tu veux

signaler à un administrateur
Commentaire de GanJasTeR le 26/04/2007 03:18:34

Ha oui lol et bien c'est une erreur de frappe...
Pourtant les images ne paraissaient pas déformer.
Du coup tu avait raison,  $rapport = $w_max / $w_img est plus juste.

signaler à un administrateur
Commentaire de kankrelune le 26/04/2007 10:50:56

Juste au passage... tu ne redimensionne pas vraiment tes images là... tu change juste leur taille d'affichage... l'intérêt du redimensionnement c'est d'avoir des images plus petites certes mais aussi et avant tout d'obtenir des images plus légère ce qui n'est pas le cas ici et n'est, à ma connaissance, pas possible sans une extension de manipulation d'image comme la lib GD ou alors faut toucher sa bille en manipulation de données binaires... mais bon ce code peut quand même servir pour ceux qui n'ont pas la lib GD installée sur leur serveur... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de coucou747 le 26/04/2007 13:15:34

"ceux qui n'ont pas la lib GD installée sur leur serveur..."=> ca existe encore ca ?

signaler à un administrateur
Commentaire de amezghal le 26/04/2007 22:51:42

tu prend comme argument le max width, puis tu doit calculer le heigth automatiquement pour garder le rapport entre le heigth et le width original, et inversement...
car si on prend le heigth et le width on risque de déformer l'image ^^

signaler à un administrateur
Commentaire de coucou747 le 26/04/2007 23:20:47

moi dans ma fonction, on envoyait les deux, et ca prennait soit le rapport minimum soit le rapport maximum, soit les deux... c'etait bien plus souple on pouvait faire une photo redimentionnee de X * Y px par exes, par defaut ou exactement...

signaler à un administrateur
Commentaire de bluedemon le 27/04/2007 08:20:41

kankrelune a raison, tu ne fais que redimensionner l'affichage mais pas l'image. Le navigateur chargera l'image avec le poid total, dans ton cas le chargement serait long si l'image est grande meme si en affichage l'image apparait en petit. J'ai un script qui permet de redimensionner, de régler la qualité de compression en enregistrant l'image (apres un upload).Je penserai à le diffuser.

signaler à un administrateur
Commentaire de ozyman le 30/04/2007 11:21:18

"bluedemon" je cherche une astuce comme ça car il existe des serveurs gratuits en php qui n'ont pas Gd accessible gratuitement.
Alors pour faire une galerie photo sans redimentionnement c'est plutot difficile. ( on est vite limité par le poids important des photos). Merci d'avance

signaler à un administrateur
Commentaire de bluedemon le 30/04/2007 16:33:03

Ok j'y penserai dès que g plus de tps devant moi (il faut que je rajoute des commentaires dans le code pour le diffuser). MAis aucun probleme, je le diffuserai.

signaler à un administrateur
Commentaire de Bernisage le 01/05/2007 02:04:58

Bonjour !
Je me suis personnellement aussi penché sur le sujet et j'ai fait comme suite :
En considérant qu'on base la miniature sur une largeur prédéfinie ex: 150px

//Largeur choisie
$largeurMax = 150;

//L'image d'origine
$largeurImg = 800;
$hauteurImg = 600;

//Rapport
$rapport = $largeurMax / $largeurImg; //0.19

//Taille finale
$width  = $largeurMax;  //150px
$height = $rapport * $hauteurImg; //114px

?

signaler à un administrateur
Commentaire de bluedemon le 01/05/2007 19:51:09

Bernisage : Comme on l'a expliqué, ce genre de miniature n'est qu'une miniature en affichage mais pas en poid donc lourd a charger si l'image est grande d'origine.

signaler à un administrateur
Commentaire de ozyman le 02/05/2007 12:02:49

bluedemon je te remercie d'avance car c'est un peu dur pour moi de tout développer tout seul ;-)
trop top...

signaler à un administrateur
Commentaire de Bernisage le 02/05/2007 19:45:55

bluedemon : oui j'ai bien compris. J'ai juste mis cette formule pour voir si elle était plus ou moins correcte. Je n'ai jamais dis que j'allais l'utiliser pour juste redimensionner l'image au niveau de ses paremètres width et height. Je sais très bien que c'est trop lourd à charger dans le navigateur de l'utilisateur, autant au niveau poids de l'image (imaginer que vous en ayez 20 à charger), qu'au niveau des ressources matérielles.

signaler à un administrateur
Commentaire de Ours70 le 04/05/2007 11:27:40

Super sympa ce code pour redimmensioner les images !!

Et pour faire une galleries d'images ca peutr etre le top !!

En plus vu que je suis debutant aussi lol ca va servir beaucoup !!

PS : Ou pourrai- je trouve un script aussi pourla creation de galleries d'images TRES SIMPLE AUSSI !!!

MERCI

signaler à un administrateur
Commentaire de zarkofaj le 02/06/2007 12:53:55

Ouff . . . La discussion est quand même assez sévère

signaler à un administrateur
Commentaire de maitre_dious le 06/02/2008 14:56:50 1/10

Un poids identique.

signaler à un administrateur
Commentaire de hugsgiver le 16/08/2008 12:25:09

Moi je pensait trouver une fonctionpour réduire la taille en octet, vous vous compliquez bien la tête, sa c facile se que vous avez fait, il y a plus simple, et la vous êtes sur que le taille n'est pas déformé:


echo "<a href=\"$dossier/$file\" target=\"_blank\" alt=\"Agrandire l'image\" title=\"Agrandire l'image\"><img style=\"width: 200px;\" alt=\"Agrandire l'image\" title=\"Agrandire l'image\" src=\"$dossier/$file\" /></a>";


moi je vait plutot me pencher sur la librairie gd!

signaler à un administrateur
Commentaire de bluedemon le 19/08/2008 13:35:08

hugsgiver, la taille en octet correspond à la qualité de l'image et à sa taille. Pour avoir une taille plus petite en octet, il faut réduire l'image et sa qualité.
Bien sur qu'il faut utiliser la librairie GD. C'est elle qui te permettra de réduire l'image et sa qualité.
Et l'exemple que tu as donné, tu affiche l'image avec une taille peut être réduite mais que en affichage. Si tu as une image de 1280*1024, tu l'affichera peut être en 200*(ratio) mais le chargement sera très long surtout quand c'est une galerie. Car tu charges l'image en 1280*1024 et non 200*(ratio). D'où l'intérêt de charger l'image dans un poids plus petit.

signaler à un administrateur
Commentaire de hugsgiver le 19/08/2008 16:43:50

oui, sa je le sait merci, mais se que je voulait dire, c'est que le calcule qui est fait plus haut pour calculer le bon raport hauteur - largeur est inutile, il suffit par exemple d'écrire juste la hauteur, et le navigateur se garge de calculer la largeur!

signaler à un administrateur
Commentaire de bouticheval le 05/03/2009 12:03:50

Salut, merci pour ton code je m'en suis servi pour redimensionner une image, par contre dans l'état actuelle des choses la redimension ne se fait pas selon les limites imposés mais selon le rapport choisi, je l'ai un peu modifié pour qu'il ne dépasse pas les largeur et hauteur max défini. Je suis pas un pro codeur mais en tout cas ça marche, si ça peut servir à quelqu'un :

function redimenssion($img, $w_max, $h_max){


$size_img = getimagesize($img); // Dimensions de l'image de base

$w_img = $size_img[0]; // Largeur de l'image de base
$h_img = $size_img[1]; // Hauteur de l'image de base

if (($w_img<=$w_max)AND($h_img<=$h_max)){
$size_final = array($w_img, $h_img); // Si l'image est plus petite que le max on ne la modifie pas
} else {

$rapport = $h_max / $h_img; // Rapport de reduction

$w_final = ceil($w_img * $rapport); // Largeur miniature arrondie
$h_final = ceil($h_img * $rapport); // Hauteur miniature arrondie


if ($w_final>$w_max){
// si la largeur finale dépasse la largeur max on re-dimensionne
$w_final=$w_max; // On transforme la largeur en largeur max la largeur
$rapportReductionmax=$w_final/$w_max; // On calcul le nouveau rapport
$h_final = ceil($h_img * $rapportReductionmax); // On en déduit la nouvelle hauteur
} else if ($h_final>$h_max) {
// si la hauteur finale dépasse la hauteur max on re-dimensionne
$h_final=$h_max; // On transforme la hauteur en hauteur max la largeur
$rapportReductionmax=$h_final/$h_max; // On calcul le nouveau rapport
$w_final = ceil($w_img * $rapportReductionmax); // On en déduit la nouvelle largeur
}


$size_final = array($w_final, $h_final); // Mise en tableau des dimensions finales
}
return $size_final; // On retourne les dimensions de la miniature sous forme de tableau

}

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

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 Récupérer le résultat d'une fonction javascript dans variable php [ par Metabolicman ] Bonjour,  J'ai un petit problème, dans mon code je voudrais que lorsque l'utilisateur déclenche le onfocus cela appel une fonction javascript  avec en Gros problème d'upload d'image...encore un [ par kenru ] Bonjour &#224; tous, voil&#224; j'ai un petit souci pour un upload d'image.//Fonction d'upload$nom_fichier = $_FILES['userfile']['name'];$tmp_fichier 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 GD: optimisation de la taille d'une image en fonction du texte pour une Fonts ttf utilisé [ par Mastronic ] Bonjour, Existe t'il une fonction qui permet de me retourner la place que va prendre la police de type ttf.But: creer une image (imagecreatetruecolor) Déterminer la taille d'une image pour affichage [ par areuh ] Bonjour,Je connais déjà PHP (pas beaucoup mais je me débrouille tout seul pour le code).Par contre au niveau conception site, je débute carrément.Je c Traitement d'image (couper une partie) [ par Jits_ ] Bonjour, Je cherche une fonction php qui me permettrait de couper une image en 4 .En gros je souhaiterai partir d'une image, et en générer 4 .Si mon i Redimensionner une image en fonction de sa taille [ par Dexterage ] Bonjour, J'ai un petit probleme, d'ou ma venu ici :) Je cr&#233;e une gallerie d'image en php, donc la taille des images sont fixes, et losque je le redirection automatique en fonction de la disponibilité d'un serveur [ par cfgservices ] Mon site existe sur 2 serveurs ( 1 principal + 1 de sauvegarde ).Je souhaiterais cr&#233;er une redirection automatique en fonction de la r&#233;ponse 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


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,546 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é.