begin process at 2012 05 27 20:24:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > SNIPPET : REDIMENSIONNER UN IMAGE SANS UTILISER LA BIBLIO GD

SNIPPET : REDIMENSIONNER UN IMAGE SANS UTILISER LA BIBLIO GD


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :redimensionner, image, attribu, width, height Niveau :Débutant Date de création :29/11/2010 Vu :1 916

Auteur : masternico

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

 Description

Ce snippet permet de récupérer une paire width / height pour une image donnée en fonction des dimensions maxi de la zone d'affichage.
En gros, si je veux afficher une image qui fait 192x147 dans une boite qui fait 145x145, le code me renvois les bonnes valeurs à afficher dans les attributs de l'image.
Ex:
list($image_width,$image_height) = image_shrink('documents/' . $galleries_documents_content['documents_nom'],193, 147);

echo '<img src="documents/' . $galleries_documents_content['documents_nom'] . '" width="' . $image_width . '" height="' . $image_height . '"/>';'

Source

  • //Génère une paire d'attribus image_width / image_height en fonction des dimmensions max fournies
  • //$image_name : chemin complet vers l'image relatif à la position actuelle du script ex: 'documents/ordi.jpg'
  • //$max_width : largeur maxi de l'image
  • //$max_height : hauteur maxi de l'image
  • function image_shrink($image_name,$max_width,$max_height)
  • {
  • $image_info = getimagesize($image_name); // on récupère les info de l'image en cours
  • $image_width = $image_info[0]; // la largeur actuelle
  • $image_height = $image_info[1]; // la hauteur actuelle
  • $image_ratio_width = ($max_width / $image_width); // ratio horizontal
  • $image_ratio_height = ($max_height / $image_height); // ration vertical
  • if(($image_ratio_width < 1) OR ($image_ratio_height < 1)) // si l'un des ration est < 1; il faut redimensionner
  • {
  • $image_ratio = (($image_ratio_width > $image_ratio_height)?$image_ratio_height:$image_ratio_width); // on s'appuis sur le plus petit ratio
  • $image_width = ($image_width * $image_ratio); // on applique le ration sur la largeur
  • $image_height = ($image_height * $image_ratio); // on applique le ratio sur la hauteur
  • }
  • return(array($image_width,$image_height)); // retour à l'envoyeur
  • }
//Génère une paire d'attribus image_width / image_height en fonction des dimmensions max fournies
//$image_name :  chemin complet vers l'image relatif à la position actuelle du script ex: 'documents/ordi.jpg'
//$max_width : largeur maxi de l'image
//$max_height : hauteur maxi de l'image

function image_shrink($image_name,$max_width,$max_height)
{
        $image_info = getimagesize($image_name);   // on récupère les info de l'image en cours
        $image_width = $image_info[0];             // la largeur actuelle
        $image_height = $image_info[1];            // la hauteur actuelle
        $image_ratio_width = ($max_width / $image_width);      // ratio horizontal
        $image_ratio_height = ($max_height / $image_height);   // ration vertical

        if(($image_ratio_width < 1) OR ($image_ratio_height < 1))    // si l'un des ration est < 1; il faut redimensionner
        {
                $image_ratio = (($image_ratio_width > $image_ratio_height)?$image_ratio_height:$image_ratio_width);   // on s'appuis sur le plus petit ratio
                $image_width = ($image_width * $image_ratio);           // on applique le ration sur la largeur
                $image_height = ($image_height * $image_ratio);         // on applique le ratio sur la hauteur
        }

        return(array($image_width,$image_height));       // retour à l'envoyeur

}

 Conclusion

Comme ça, l'image reste proportionnée et ne déforme pas le cadre de destination.


 Sources du même auteur

Source avec une capture CODEC D'OBFUSCATION DE LIEN HTML (PHP5)
Source avec Zip Source avec une capture TÉLÉCHARGEMENT FICHIERS AVEC TICKET DE TÉLÉCHARGEMENT
TRANSMITION DES ARGUMENTS VERS UNE PAGE DANS UNE FRAME
LA DATE DU MÊME JOUR, LE MOIS SUIVANT

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

Source avec Zip FONCTION PHP POUR REDIMENSIONNER UNE IMAGE ET UPLOADER DANS ... par GstJasmin
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
Source avec Zip REDIMENSIONNER UNE IMAGE PHP (GD VERSION 2 REQUISE) par CrazyShooter
REDIMENTION D'IMAGE, LIBRAIRIE GD par 17l7
REDUCTION D'UNE IMAGE À L'ÉCRAN PAR RAPPORT À UNE TAILLE MAX... par MagicManu

Commentaires et avis

Commentaire de zakuli le 30/11/2010 09:01:25

Le titre n'est il pas un peu abusif ? Je ne vois pas réellement de redimensionnement d'image mais plutôt des calculs sur ses dimensions.

Commentaire de neigedhiver le 30/11/2010 11:09:57

C'est limite foutage de gueule de poster un snippet ici, y'a coddyx qui sert à ça :
http://www.codyx.org

Commentaire de winwarrior le 30/11/2010 12:25:06

Surtout que la fonction getimagesize() fait partie de la librairie GD : http://fr.php.net/getimagesize

Commentaire de masternico le 01/12/2010 07:25:56

Zakuli, Winwarrior =>
Bon d'accord, le titre porte peut être à confusion, mais le principe est là malgré tout. Et oui c'est vrai, j'utilise la fonction getimagesize qui fait partie de GD. Mais c'est tout.

neigedhiver =>
On est justement dans la zone... : snippet. Donc oui, c'est le bon endroit pour poster ce genre de petit bout de code. Et je ne vois pas pourquoi coddyx serait un meilleur endroit pour mon script qu'ici. A moins que tu ne considère mon script comme un déchet et coddyx comme une poubelle? Mais ça, ça ne serait pas gentil de ta part et celà ne te ressemblerait pas du tout...

Si je dois redimensionner en direct avec php, ça me pompe de la ressource proc (ex: si j'affiche un gallerie de 100 photos et que mon script doit se charger de toutes les redimensionner à la volée, le tout consulté par 100 internautes en même temps : il me faut un monstre de serveur).

Evidemment, je pourrais stocker les miniatures au bon format directement sur le disque sur serveur, mais que se passera-t-il un jour si je veux afficher des miniatures de 10px de plus sur chaque dimension? Il, faut je  regénère toutes les miniatures. De même, si je veux afficher une taille de miniature sur un listing, mais une autre taille dans un descriptif, et puis encore une autre pour un autre affichage? Il faut que je stocke toutes les miniatures aux bon format?... no way

Alors, puisque les browsers savent très bien redimensionner les images à la volées et que les connexions ADSL permettent à l'utilisateur d'avoir un débit suffisant, je choisi l'option d'envoyer la photo entière et de dire au browser de me l'afficher aux bonnes dimensions. D'autant que le chache du browser permet de ne télécharger la photo qu'une fois.

Quand une photo est uploadée sur le serveur, elle est redimensionnée avec GD au format max 1024*768 (ce qui n'est déjà pas mal), puis envoyée à l'internaute telle quelle. Le browser se charge du redimensionnement. Par contre, pour qu'il puisse le faire, il faut calculer les bonnes dimensions pour ne pas que le découpage HTML soit décalé, ni que l'image soit déformée si les proportions ne sont pas respectée.

Donc oui effectivement, je ne redimensionne pas l'image dans le sens ou je la stocke en miniature, mais le résultat est que mon image est redimensionnée une fois affichée à l'écran, donc techniquement, j'ai redimensionné mon image...

Commentaire de neigedhiver le 01/12/2010 09:05:51

Je sais pas comment on peut faire plus clair que ce que j'ai écrit... Les snipopets se postent sur codyx.org. Ici, on est dans la zone SOURCES.

Commentaire de winwarrior le 01/12/2010 14:14:08

Pour le coup, il vaut mieux stocker une miniature pour chaque image (voir plusieurs miniatures si t'utilises plusieurs tailles), car imagine 100 photos haute définition de 2mo (200mo ?) à charger quand t'as 100 visiteurs en même temps (20go ?), ça te coutera bien + cher en bande passante que l'espace pris par des miniatures sur le disque dur.
Et sans parler de ça, tout le monde n'a pas 20mbps à la maison, surtout avec le développement du web sur smartphone en connexion 3G/edge.

Sinon, ce qui serait intéressant à implémenter dans ton code, ça serait de détecter le type de l'image (jpg, png, etc..) et de récupérer la taille de l'image toi même sans utiliser de fonction GD.

Commentaire de neigedhiver le 01/12/2010 14:28:53

Mais à la limite, comme le code n'utilise pas de fonction GD, tout va bien...

Je cite la doc de PHP :
"Cette fonction ne nécessite pas la bibliothèque GD."

Commentaire de masternico le 01/12/2010 21:49:42

hmmm...
neigedhiver =>
j'avais mal interprété ta remarque sur codyx. Je ne connaissais pas cette branche du site. Comme j'avais bien fait attention à venir dans la zone astuce, je ne comprenais pas pourquoi tu me disais d'aller dans une autre zone qui me semblais être étrangère à phpcs. Je te présente mes excuses.

Winwarrior =>
A 1024*768, une image pèse environ 150ko, et 15Mo à 5Mbs c'est 24s: c'est moins de temps qu'il ne faut pour agriper l'assenceur et descendre en bas en regardant toutes les photos.
Bon, celà dit, effectivement, le coté pesant d'envoyer les images en taille réelle présente certain (gros) désavantage (Perso, je suis sur un serveur avec bande passante illimité donc je ne me soucis pas trop de ça) Pour ce qui est des smartphones, tu es dans le vrai. Par contre quand on voit la vistesse à la quelle ça va, dans un an, ils seront tous équipés d'un disque dur SSD et gavés de mémoire, donc je ne m'en fais pas trop. En 3G, on optient de bons taux de transfert, et si la zone de cache est suffisante, le surf est plus ou moins transparent.

L'idée de détecter à la main les dimension de l'image est séduisante, reste àvoir si c'est faisable... facilement je veux dire

Au fait, bien vu pour le coup de getimagesize() qui ne fait pas parti de la GD...

Commentaire de rasmulti le 06/12/2010 11:08:17

Bonjour,
comment tester si ça fonctionne ?
J'ai voulu afficher le résultat de $image_width et de $image_height avec echo, mais le résultat est :
Undefined variable...

Merci.

Commentaire de masternico le 06/12/2010 14:32:53

Bonjour,
il suffit de mettre ces lignes de code dans une page et de lancer

<php
$image_name = 'documents/' . $galleries_documents_content['documents_nom']'; // à remplacer par votre fichier
$zone_max_width = 193;
$zone_max_height = 147;
list($image_width,$image_height) = image_shrink($image_name,$zone_max_width,$zone_max_height);

echo '<img src="' . $image_name . '" width="' . $image_width . '" height="' . $image_height . '"/>';'
?>

Commentaire de Etn3000 le 10/12/2010 17:15:28

Salut,
je pense que tu devrait changer ton titre, "sans utiliser la librairie gd" est un peu mensongé, tu ne crois pas?
++

Commentaire de neigedhiver le 10/12/2010 17:20:40

On peut savoir pourquoi "sans utiliser la biblio gd" est mensonger ?

Commentaire de masternico le 10/12/2010 17:44:29

non, car comme l'a déjà souligné neigedhiver, la fonction getimagesize ne fait pas partie de la gd

Commentaire de Etn3000 le 10/12/2010 17:48:48 7/10

Ah ok, j'ai cru. Toutes mes excuses.

Commentaire de masternico le 11/12/2010 15:27:29

Il n'y a pas de mal, merci pour la note.

Commentaire de marm0tte le 15/12/2010 18:03:12

Je trouve vraiment pas ca utile perso.
Redimensionner des images en html c'est une mauvaise pratique et ca diminue les performance d'un site.

Perso pour moi c'est sans interêt.

Commentaire de marm0tte le 15/12/2010 18:04:56

Je tiens a corriger mon commentaire précédents. C'est pas la source qui est vraiment sans interêt et contre performant mais son exemple d'utilisation.

Désolé

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème avec createimagefromjpeg et thumnails [ par j_claude05 ] Salut &#224; tous je viens &#224; vous apr&#232;s de longues heures la t&#234;te dans le code et &#224; vrai dire &#224; l'heure ou j'ecris je vois pl GD : Affichages IE et firefox ? [ par alonsyl ] bonjour,afin de generer des miniatures a la volee sur mon site web j'ai cree la petite fonction suivante :function creerMiniature($dossier, $img) {    probleme avec imagecopyresized [ par ldevun ] Bonjour,Je souhaite redimmensionner une image et l'enregistrer dans un répertoire. Après lecture des messages sur ce sujet sur le forum j'ai fait le c opacité, redimensionnement, noir et blanc et arrondi [ par paguira ] je cherche à amméliorer le script suivant:les valeurs :original = source du fichier (gif,jpg ou png)weight = largeur de l'imageheight = hauteur de l'i redimension d'une image [ par clement1138 ] voila j'ai ecris ce code..... pour redimensionner mes images...mais est ce que je peux le faire a la taille que je veux au lieu d'utiliser un pourceta enregistrement d'image apres redimensionnement [ par clement1138 ] voila bon j'ai un code qui me permet de redimensionner des images puis de les enregistrer dans un dossier.....toutes les images s'appelle image suivi Problème redimension image [ par psyckan ] Bonjour,Voila j'essaie de redimensionner une image au moment de l'upload mais ça marche pas et ça m'affiche plein des caractère spéciaux à l'endroit o faire une bouclze sur un fichier contenant des photo et les redimmensionner [ par hannao ] salut à tous, voilà j'ai un petit code qui redimensionne une photo (contenu dans un dossier) à la fois j'aimerais pouvoir faire une boucle dans le fic fonction pour redimensionner des images de grande taille [ par oceanrider ] Bonjour à tous, Je me tourne vers vous car malgré mes recherches, je ne trouve pas de solution à mon problème. J'ai recours à une fonction pour redi erreur de synthaxe près de '-1' à la ligne 1 [ par fredoann ] Bonjourj'ai une erreur qui s'affiche lorsque je lance ma page "erreur de synthaxe près de '-1' à la ligne 1"d'où  sort ce -1 quelqu'un a-t-il une idée


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,530 sec (3)

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