Problèm affichage miniature

Résolu
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009 - 23 août 2007 à 10:39
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009 - 23 août 2007 à 18:24
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

fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
23 août 2007 à 11:51
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
3
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 13:50
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" />
3
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 10:53
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" />
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 10:55
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" />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 11:53
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" />
0
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
23 août 2007 à 12:37
Je ne sais pas coder. J'apprends le php depuis hier. Pour le moment j'essaye de décoder ce que vous écrivez.
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
23 août 2007 à 13:23
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" />
0
fornatus Messages postés 28 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 29 mars 2009
23 août 2007 à 18:24
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 !
0
Rejoignez-nous