codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 2009
-
24 nov. 2007 à 21:26
cs_Villa Flore
Messages postés2Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention10 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.
cs_Villa Flore
Messages postés2Date d'inscriptionmardi 14 novembre 2006StatutMembreDernière intervention10 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.
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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 25 nov. 2007 à 19:55
Ben on est 3 du même avis alors.
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 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és63Date d'inscriptionjeudi 30 septembre 2004StatutMembreDernière intervention18 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és1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és1423Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention29 décembre 20124 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és1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 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.
26 avril 2008 à 02:55
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).
10 mars 2008 à 20:35
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.
25 nov. 2007 à 19:57
25 nov. 2007 à 19:55
25 nov. 2007 à 19:46
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.
25 nov. 2007 à 17:57
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...
25 nov. 2007 à 16:58
le contenu d'un répertoire (à la recherche d'image afin de les afficher en
miniature).
Bon, je fais une classe Image ou pas?
25 nov. 2007 à 16:53
Et carrément plus de flags oué ! C'est ce qui permet la modularité d'une fonction :)
25 nov. 2007 à 15:58
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...
25 nov. 2007 à 02:44
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
24 nov. 2007 à 21:26
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 :)