Problèm affichage miniature

Résolu
Signaler
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009
-
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009
-
Bonjour je n'arrive pas à afficher mes miniatures malgré le fait que celles-ci restent cliquables et s'ouvrent correctement dans une pop.

Voici le code incriminé :

    <?php
            
    echo'[javascript:PopupImage(\'dossier/image1.jpg\') ]';

    ?>
   


Voici le code de miniature.php :

<? if(isset($_GET["im"])) {
//mettre ici les valeurs par défaut de limitation de taille
$defaut_largeur_max=165;
$defaut_hauteur_max=132;
$size_im=getimagesize($_GET["im"]);
if(isset($_GET["w"]) && ($_GET["w"]+0)) $largeur_max = $_GET["w"]; else $largeur_max = $defaut_largeur_max;
if(isset($_GET["h"]) && ($_GET["h"]+0)) $hauteur_max = $_GET["h"]; else $hauteur_max = $defaut_hauteur_max;
if($size_im[0]>=$size_im[1] && $size_im[0]>$largeur_max) {
$largeur=$largeur_max;
$hauteur=ceil(($largeur/$size_im[0])*$size_im[1]);
} elseif($size_im[1]>=$size_im[0] && $size_im[1]>$hauteur_max) {
$hauteur=$hauteur_max;
$largeur=ceil(($hauteur/$size_im[1])*$size_im[0]);
} else {
$largeur=$size_im[0];
$hauteur=$size_im[1];
}
header("Content-Type: image/jpeg");
$img_in = imagecreatefromjpeg($_GET['im']);
$img_out = imagecreatetruecolor($largeur, $hauteur);
imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
$t = imagejpeg($img_out);
echo $t; } ?>

8 réponses

Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

En fait la réponse était :

    <?php
            
   
echo'[javascript:PopupImage(\'dossier/image1.jpg\') ]';

    ?>
   

[auteurdetail.aspx?ID=457351 pysco68] Je serais ravi de ne pas regénérer les miniatures à chaque fois mais je ne pense pas maîtriser assez bien les règles de ponctuation de base. Si ça te tente d'essayer
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
voilà comme promis!!
<hr size= "2" width="100%" /><?

if(!isset($_GET["im"])){die("Pas assez de parametres!");}

// regroupe toutes les variables à chercher dans la requète c'est plus lisible!
$image = urldecode($_GET["im"]);
$w = urldecode($_GET["w"]);
$h = urldecode($_GET["h"]);

// regroupe les autres variables de configuration!
$defaut_largeur_max = 165;       // définition de largeur max des miniatures
$defaut_hauteur_max = 132;       // définition de hauteur max des miniatures
$dossier_images = "dossier";    // Dossier dans lequel doivent être toutes les image!
$dossier_cache  = "/cache";      // Dossier dans lequel se trouve le cache (attention! créé dans $dossier_images!)

// ------------------------------------------------------------------------------------------
$chemin_image = $dossier_images.'/'.$image;
$chemin_cache = $dossier_images.$dossier_cache;
// ------------------------------------------------------------------------------------------

// ---------------------------- LE MECANISME DE CACHE ---------------------------------------
if(!is_dir($chemin_cache)){mkdir($chemin_cache);}      // Si jamais $dossier_images/cache/ n'est pas créé, on créé

if(file_exists($chemin_cache."/".$image)){
    header("Content-type: image/jpeg");                // définir le type-mime correctement!
    $cached_img = imagecreatefromjpeg($chemin_cache."/".$image) or die ("Erreur lors du chargement depuis cache"); // Charger
    imagejpeg($cached_img, null, 90);                  // Envoyer vers le navigateur!
    die();                                             // et puis arrêter le script!

// ---------------------------- ET SINON :) -------------------------------------------------
}else{
    $size_im = getimagesize($chemin_image);
    if(isset($_GET["w"]) && ($w+0)) $largeur_max = $w; else $largeur_max = $defaut_largeur_max;
    if(isset($_GET["h"]) && ($h+0)) $hauteur_max = $h; else $hauteur_max = $defaut_hauteur_max;

    if(($size_im[0] >= $size_im[1]) && ($size_im[0] > $largeur_max)){
        $largeur=$largeur_max;
        $hauteur=ceil(($largeur/$size_im[0])*$size_im[1]);
    } elseif(($size_im[1]>=$size_im[0]) && ($size_im[1]>$hauteur_max)) {
        $hauteur=$hauteur_max;
        $largeur=ceil(($hauteur/$size_im[1])*$size_im[0]);
    } else {
        $largeur=$size_im[0];
        $hauteur=$size_im[1];
    }

    header("Content-Type: image/jpeg");
    $img_in = imagecreatefromjpeg($chemin_image);
    $img_out = imagecreatetruecolor($largeur, $hauteur);
    imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), imagesx($img_in), imagesy($img_in));
    imagejpeg($img_out, $chemin_cache."/".$image, 80);         // ça c'est pour créer l'image dans le cache!
    imagejpeg($img_out, null, 80);                             // là tu fais la sortie normale
}

?>
<hr size="2" width="100%" />juste deux trois petits conseil:
<li>document ton script!!! quand t'est entrain de programmer tu sais ce que tu fais! mais de te comprendre après 2-3 ans c'est difficle!! et je sais de quoi je parle!</li><li>laisse un peu d'air dans tes scripts!! laisse des espaces, de lignes vides etc! ça augmente la lisibilité et ça ne change quasiment rien au temsp d'exécution de ton script!</li><li>je l'ai déjà dit dans mon post précédent! pour TOUTES les variables à récupèrer dans l'URL de ton script utilise urldecode($_GET["variable"]); comme ça tu t'évite des problèmes de compatibilité avec les configurations de serveur!!</li>Vala!! j'espère que t'a apris quelquechose!!!

Bonne chance pour la suite!

<hr size ="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
dans ton code PHP:
<hr size= "2" width="100%" /><strike>$t = </strike>imagejpeg($img_out);
<strike>echo $t;</strike> } ?>
<hr size="2" width="100%" />
la fonction imagejpeg donne directement la sortie... donc pas besoin de faire le truc avec la variable intermédiare...
si tu veux débugger un script comme ça enlève le header("Content-Type: image/jpeg"); et tu verra les sorties d'erreur!

<hr size ="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
P.S.: essaye d'implémenter un système de mise en cache... c'est t'évite de regénérer les miniatures à chaque fois! ça économise du temps serveur et ça diminue l'attente pour l'utilisateur!

si tu veux t'inspirer regarde dans ma source ici!

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
qu'appelle tu "les règles de ponctuation de base"???

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

Je ne sais pas coder. J'apprends le php depuis hier. Pour le moment j'essaye de décoder ce que vous écrivez.
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
8
oki ^^

donc ben je vais te l'expliquer :)

la doc de imagejpeg() dit que la fonction accepte trois paramètres (soit trois "donnée" dans la parenthèse derière le nom de la fonction)...
<hr size= "2" width="100%" />en clair: imagejpeg( $ressource_image , $chemin_ds_systeme_de_fichier, $qualité);
<hr size ="2" width= "100%" />à savoir que seul le premier paramètre est obligatoire!
$ressource_image : c'est "l'image" virtuelle dans laquelle tu peux "dessiner" en PHP et c'est celle que tu utilise!
$chemin_ds_systeme_de_fichier: te permet d'écrire l'image générée dans un fichier sur le disque dur au lieu de l'envoyer au navigateur! c'est cette option qu'on va utiliser pour faire le méchanisme de cache pour ton script!
$qualité: c'est un integer (entier numérique) qui définit la qualitée du fichier JPG (le défaut est à 75 la plupart du temps), je te conseille de monter cette valeur à 80 voir 85 ça augment considérablement la qualité visuelle, sdans pour autant grossir les fichiers de sortie de façon importante...

un Début:
donc ben la première chose à fair c'st de définir une structure de cache, le plus simple est de créer un dossier /cache quelquepart dans le dossier d'images, chez toi ça devrait être quelquechose comme /dossier/cache (si je ne trompe pas...)
et puis ben il faut aussi sécuriser un peut ton script!! parce que ben si je voulais je pourrais générer une miniature de n'importe où sur ton serveur, voire d'une image sur un autre serveur!!! donc impératif de changer le type de requête!

en admettant que toutes les images dont tu veuille créer des miniatures se trouvent dans /dossier tu peux faire une requête du type:
miniature.php?im =image1.jpg
il suffit après de changer cette ligne:
<hr size= "2" width="100%" />$size_im=getimagesize($_GET["im"]);
<hr size="2" width="100%" /> --->
<hr size ="2" width="100%" />$dossier = "/dossier";                              // Dossier dans lequel doivent être toutes les image!
$image = urldecode($_GET["im"]);         // voir *
$chemin = $dossier.'/'.$image;                // voilà le chemin complète vers ton image!
$size_im = getimagesize($chemin);  <hr size="2" width="100%" />Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
Messages postés
28
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
29 mars 2009

Merci énormément ! Je viens de lire une première fois la source et je comprends déjà beaucoup mieux.
C'est chic d'avoir pris du temps pour m'écrire ce code ! Encore Merci !