REDIMENSIONNEMENT AUTOMATIQUE D'IMAGES

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 25 avril 2007 à 19:46
bouticheval Messages postés 1 Date d'inscription lundi 19 janvier 2009 Statut Membre Dernière intervention 18 mars 2009 - 5 mars 2009 à 12:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42443-redimensionnement-automatique-d-images

bouticheval Messages postés 1 Date d'inscription lundi 19 janvier 2009 Statut Membre Dernière intervention 18 mars 2009
5 mars 2009 à 12:03
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

}
hugsgiver Messages postés 7 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 17 avril 2008
19 août 2008 à 16:43
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!
cs_bluedemon Messages postés 41 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 3 novembre 2008
19 août 2008 à 13:35
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.
hugsgiver Messages postés 7 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 17 avril 2008
16 août 2008 à 12:25
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 "";


moi je vait plutot me pencher sur la librairie gd!
maitre_dious Messages postés 4 Date d'inscription samedi 10 avril 2004 Statut Membre Dernière intervention 6 février 2008
6 févr. 2008 à 14:56
Un poids identique.
zarkofaj Messages postés 39 Date d'inscription jeudi 11 janvier 2007 Statut Membre Dernière intervention 18 novembre 2007
2 juin 2007 à 12:53
Ouff . . . La discussion est quand même assez sévère
Ours70 Messages postés 8 Date d'inscription lundi 14 août 2006 Statut Membre Dernière intervention 4 mai 2007
4 mai 2007 à 11:27
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
Bernisage Messages postés 2 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 2 mai 2007
2 mai 2007 à 19:45
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.
ozyman Messages postés 13 Date d'inscription dimanche 9 juillet 2000 Statut Membre Dernière intervention 8 mars 2014
2 mai 2007 à 12:02
bluedemon je te remercie d'avance car c'est un peu dur pour moi de tout développer tout seul ;-)
trop top...
cs_bluedemon Messages postés 41 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 3 novembre 2008
1 mai 2007 à 19:51
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.
Bernisage Messages postés 2 Date d'inscription lundi 18 août 2003 Statut Membre Dernière intervention 2 mai 2007
1 mai 2007 à 02:04
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

?
cs_bluedemon Messages postés 41 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 3 novembre 2008
30 avril 2007 à 16:33
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.
ozyman Messages postés 13 Date d'inscription dimanche 9 juillet 2000 Statut Membre Dernière intervention 8 mars 2014
30 avril 2007 à 11:21
"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
cs_bluedemon Messages postés 41 Date d'inscription mercredi 21 septembre 2005 Statut Membre Dernière intervention 3 novembre 2008
27 avril 2007 à 08:20
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.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 avril 2007 à 23:20
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...
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
26 avril 2007 à 22:51
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 ^^
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
26 avril 2007 à 13:15
"ceux qui n'ont pas la lib GD installée sur leur serveur..."=> ca existe encore ca ?
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
26 avril 2007 à 10:50
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°
GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007
26 avril 2007 à 03:18
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.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 avril 2007 à 20:58
(a+a)/2 = a...

enfin tu en penses ce que tu veux
GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007
25 avril 2007 à 20:47
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.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 avril 2007 à 20:40
$rapport = $w_max / $w_img; serait plus adapte non ?
GanJasTeR Messages postés 27 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 31 mai 2007
25 avril 2007 à 20:31
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 !
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 avril 2007 à 19:46
$rapport = (($w_max / $w_img) + ($w_max / $w_img)) / 2; // Rapport
lol

quand au


le width et height c'est sans interret...
Rejoignez-nous