begin process at 2012 05 31 06:32:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

problèm affichage miniature


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

problèm affichage miniature

jeudi 23 août 2007 à 10:39:39 | problèm affichage miniature

fornatus

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é :

<div class="bloc">

    <?php
            
    echo'<a href="javascript:PopupImage(\'dossier/image1.jpg\')"><img src="miniature.php?img=dossier/image1.jpg" alt=""></a>';

    ?>
    </div>


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; } ?>



jeudi 23 août 2007 à 10:53:19 | Re : problèm affichage miniature

pysco68

dans ton code PHP:

$t = imagejpeg($img_out);
echo $t; } ?>



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!




Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo

jeudi 23 août 2007 à 10:55:33 | Re : problèm affichage miniature

pysco68

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!


Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo

jeudi 23 août 2007 à 11:51:32 | Re : problèm affichage miniature

fornatus

Réponse acceptée !
En fait la réponse était : <div class="bloc">

    <?php
            
    echo'<a href="javascript:PopupImage(\'dossier/image1.jpg\')"><img src="miniature.php?im=dossier/image1.jpg" alt=""></a>';

    ?>
    </div>

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
jeudi 23 août 2007 à 11:53:04 | Re : problèm affichage miniature

pysco68

qu'appelle tu "les règles de ponctuation de base"???


Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo

jeudi 23 août 2007 à 12:37:28 | Re : problèm affichage miniature

fornatus

Je ne sais pas coder. J'apprends le php depuis hier. Pour le moment j'essaye de décoder ce que vous écrivez.
jeudi 23 août 2007 à 13:23:59 | Re : problèm affichage miniature

pysco68

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)...

en clair: imagejpeg($ressource_image, $chemin_ds_systeme_de_fichier, $qualité);

à 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:

$size_im=getimagesize($_GET["im"]);

--->

$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); 
* utilise ureldecode() pour accèder à tes variables de requètes sinon sur certaines configurations ça ne marchera pas!!!

et

$img_in = imagecreatefromjpeg($_GET['im']);

----->

$img_in = imagecreatefromjpeg($chemin);


Vérifier si l'image est dans le cache:

pour ça tu peux utiliser la fonction file_exists(), elle retourne true si le fichier existe false sinon et est donc parfaite pour une petite condition if() ^^

donc chez toi celà devra ressembler à quelquechose du genre:

if(file_exists($dossier."/cache/".$image)){
    // ce qu'il va y avoir dans la boucle!
}


et si l'image est dans le cache ben on va la lire, l'envoyer au navigateur et arrêter le script à cet endroit avec:

header("Content-type: image/jpeg");   // définir le type-mime correctement!
$cached_img = imagecreatefromjpeg($dossier."/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!


donc au final la boucle de chargement depuis le cache ressemble à ça:

if(file_exists($dossier."/cache/".$image)){
    header("Content-type: image/jpeg");
    $cached_img = imagecreatefromjpeg($dossier."/cache/".$image) or die ("Erreur lors du chargement depuis cache");
    imagejpeg($cached_img, '', 90); 
    die();
}

Et sinon on créé l'image pour le cache!

là ça concerne la fin de ton script!
il faut remplacer

$t = imagejpeg($img_out);
echo $t;
}


par ça:

imagejpeg($img_out, $chemin, 80);    // ça c'est pour créer l'image dans le cache!
imagejpeg(
$img_out, null, 80);            // là tu fais la sortie normale
}


bon bon, ça devrait tout t'expliquer!!
 je regarde encore un peut ta source et dans le 1/4h qui vients je pense encore te poster la source complète avec ca   che et variables sécuriésées (ainsi que testée ^^ parce que là ben j'ai rien vérifié :)

Bonne aprèm!

Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo

jeudi 23 août 2007 à 13:50:49 | Re : problèm affichage miniature

pysco68

Réponse acceptée !
voilà comme promis!!

<?

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
}


?>

juste deux trois petits conseil:
  • 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!
  • 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!
  • 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!!
Vala!! j'espère que t'a apris quelquechose!!!

Bonne chance pour la suite!


Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo

jeudi 23 août 2007 à 18:24:03 | Re : problèm affichage miniature

fornatus

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 !


Cette discussion est classée dans : hauteur, max, size, largeur, im


Répondre à ce message

Sujets en rapport avec ce message

Pb php : ImageCreateFromJPEG [ par Trascal ] /*Bijour,j'ai un ti pb en php :/ quelqu'un pourrait-il m'aider? voici mon pb$donnees est de type "fichier.jpg"et $directory est un répertoire que l'on Comment éviter le "Max File Size Exceeded" ? [ par Tomcube ] Salut !Ma question est : y-a-t'il un moyen en PHP ou autre d'éviter que le message "Max File Size of xxx bytes is exceeded" s'affiche lorsque le visit Taille max d'un tableau [ par ceeno ] Voila je cherche a definir la largeur max d'un tableau parceke lorske l'on fait comme cecica n'indike ke la taille min et si le tableau contient une l Traitement d'image [ par Drazounet ] Bonjour à tous, J'ai trouvé sur ce site une fonction sympa qui permet de redimensionner des images (en indiquant la largeur et la hauteur) sans la dé attaque upload [ par speedylol ] Bonjour j'ai trouver une petit script ici sur sympa que j'ai modifier pour crée des miniature en respctant le dimensions , mais j'ai un probléme d'att pb redimension image jpeg/bmp [ par David_monchy ] Salut à tous, j'ai voulu faire une fonction permettant de redimensionner une image uploadée. Je me suis inspiré des fonctions de ce site, et tout marc probleme de recherche de données [ par CyberMen30 ] J'ai un formulaire qui fonctionne bien...descendre pour explicationinclude("conn.php"); if(isset($_POST)) { extract($_POST); &nbsp Image aléatoire [ par theoscar ] Bonjour à tous !Voici un code qui affiche une image aléatoire sur une page à partir d'un dossier 'image'. Ce code fonctionne très bien mais j'aimerais detection navigateur [ par gaillardo ] Bonjour à tous,J'ai un petit problème avec une détection de navigateur avec getenv("HTTP_USER_AGENT") qui fonction bien en local avec easyPHP mais lor Probleme popup Javscript et php [ par corbakoo ] Bonsoir à tous Voilà mon probleme :J'utilise la fonction :function popup(page,largeur,hauteur,options){ var top=(screen.height-hauteur)/2; var left=(


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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

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