CRÉATION DE MINIATURE D'UNE IMAGE

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 24 nov. 2007 à 21:26
cs_Villa Flore Messages postés 2 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 10 août 2011 - 26 avril 2008 à 02:55
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/44819-creation-de-miniature-d-une-image

cs_Villa Flore Messages postés 2 Date d'inscription mardi 14 novembre 2006 Statut Membre Dernière intervention 10 août 2011
26 avril 2008 à 02:55
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).
naej56 Messages postés 6 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 18 août 2008
10 mars 2008 à 20:35
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.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 nov. 2007 à 19:57
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
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
25 nov. 2007 à 19:55
Ben on est 3 du même avis alors.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 nov. 2007 à 19:46
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.
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
25 nov. 2007 à 17:57
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...
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
25 nov. 2007 à 16:58
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?
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
25 nov. 2007 à 16:53
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 :)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 nov. 2007 à 15:58
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...
Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
25 nov. 2007 à 02:44
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
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
24 nov. 2007 à 21:26
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 :)
Rejoignez-nous