IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] imagecreatefromjpeg & getimagesize


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut [GD] imagecreatefromjpeg & getimagesize
    voilà : j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    function getVignette($id) {
    	$id = intval($id);
    	$file = "photo.php?id=$id"; 
    	$image = imagecreatefromjpeg($file);
    	$details = getimagesize($file);
    	$s = ($details[0]>$details[1])?'width="100"':'height="100"';
    	$s = '<img src="photo.php?id='.$id.'" '.$s.'>';
    	return $s;
    }
    ?>
    et voici : photo.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    if (isset($_GET['id'])) {
      $id = intval($_GET['id']);
      include("connexion.php");
      $req = "SELECT photo_blob, photo_type FROM produits WHERE id = ".$id;
      $ret = mysql_query($req) or die (mysql_error());
      $col = mysql_fetch_row($ret);
     
      if (!$col[0]) {
        echo "Id d'image inconnu";
      } else {
        header("Content-type: ".$col[1]);
        echo $col[0];
      }
    } else {
      echo "Mauvais Id d'image";
    }
    ?>
    et j'a le message :

    Warning: imagecreatefromjpeg(photo.php?id=13): failed to open stream: No such file or directory in includes/functions.inc.php on line 4

    Warning: getimagesize(photo.php?id=13): failed to open stream: No such file or directory in includes/functions.inc.php on line 5

    Ce que je veux faire : récupérer la taille de l'image en BD et la faire tenir dans un carré de 100*100 grâce aux redimenssionements de la balise html <img>

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Citation Envoyé par jpean.net
    Ce que je veux faire : récupérer la taille de l'image en BD et la faire tenir dans un carré de 100*100 grâce aux redimenssionements de la balise html <img>
    Bonjour,

    Pourquoi ne fais tu pas simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src"..." width="100" height="100">
    Puisque tu veux qu'elle ait cette dimension ??

    Tu n'as pas besoin de connaitre sa taille de départ puisqu'à la fin elle devra faire 100*100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <?php
    function getVignette($id) {
    $id = intval($id);
    $file = "photo.php?id=$id"; 
    return "<img src='".$file."'  width='100' height='100'>";
    }
    ?>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut
    parce que si l'image de départ (je prends l'extrême) a une dimension de 100*400, elle sera complêtement déformée.

    donc j'aimerai garder les proportion sans que ça dépasse 100*100

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    oui, mais le code que tu as posté ne disait pas ça .

    il faut utiliser imagecopyresampled() :
    Citation Envoyé par DocPHP
    Exemple 2. Redimensionnement proportionnel d'une image
    Cet exemple affichera une image avec une largeur ou une hauteur maximale de 200 pixels.

    <?php
    // Le fichier
    $filename = 'test.jpg';

    // Définition de la largeur et de la hauteur maximale
    $width = 200;
    $height = 200;

    // Content type
    header('Content-type: image/jpeg');

    / Cacul des nouvelles dimensions
    list($width_orig, $height_orig) = getimagesize($filename);

    $ratio_orig = $width_orig/$height_orig;

    if ($width/$height > $ratio_orig) {
    $width = $height*$ratio_orig;
    } else {
    $height = $width/$ratio_orig;
    }

    // Redimensionnement
    $image_p = imagecreatetruecolor($width, $height);
    $image = imagecreatefromjpeg($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

    //Affichage
    imagejpeg($image_p, null, 100);
    ?>

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut je peux me tromper mais
    ce n'est pas ce que font ces lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $details = getimagesize($file);
    $s = ($details[0]>$details[1])?'width="100"':'height="100"';
    $s = '<img src="photo.php?id='.$id.'" '.$s.'>';

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    non, là tu redimensionnes la largeur ou la hauteur. Mais pas proportionnellement. Tu peux donc te retrouver avec une image de 400 * 100 ou de 100 * 400

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut
    cette fois, je dois sûirement me trompr alors, parce que je pensais que quand, dans une balise <img>, tu ne spécifie QUE la largeur OU la hauteur, les proportions étaient gardées (je pense que je vais garder ton code, mais j'aimerai bien comprendre mon erreur)
    ?

  8. #8
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Il y a aussi imagecopyresized() Mais La qualité sera meilleure avec resampled()

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut
    J'a mit ça ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
    include_once("connexion.php");
     
    // Le fichier
    $id = $_GET["id"];
    $filename = "photo.php?id=$id";
     
    // Définition de la largeur et de la hauteur maximale
    $width = 100;
    $height = 100;
     
    // Content type
    $req = "SELECT photo_type FROM produits WHERE id = ".$id;
    $ret = mysql_query($req) or die (mysql_error());
    $col = mysql_fetch_row($ret);
    $header = $col[0];
    header("Content-type: $header");
     
    // Cacul des nouvelles dimensions
    list($width_orig, $height_orig) = getimagesize($filename);
     
    $ratio_orig = $width_orig/$height_orig;
     
    if ($width/$height > $ratio_orig) {
    $width = $height*$ratio_orig;
    } else {
    $height = $width/$ratio_orig;
    }
     
    // Redimensionnement
    $image_p = imagecreatetruecolor($width, $height);
    $image = imagecreatefromjpeg($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
     
    //Affichage
    imagejpeg($image_p, null, 100);
    ?>
    mais j'ai :

    Warning: getimagesize(photo.php?id=13): failed to open stream: No such file or directory in vignette.php on line 20

    Warning: Division by zero in vignette.php on line 22

    Fatal error: Call to undefined function: imagecreatetruecolor() in vignette.php on line 31

  10. #10
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    getimagesize() : je crois qu'il faut spécifier un nom de fichier . "un fichier en dur"

    Division by zero : c'est normal puisqu'il n'a pas récupéré avec getimagesize()

    imagecreatetruecolor() : GD2 et PHP >= 4.0.6 et pas GIF (voir phpinfo() )

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut
    ok. Dans ce cas, comment puis-je mettre en dur (quitte à l'effacer après) un fichier enrgistré en BLOB dans une BD ? dans ce cas à une image, bine sûr.

  12. #12
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    fwrite() - fopen() - fread() ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mars 2007
    Messages : 129
    Par défaut
    j'ai fait ça et ça marche .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function getVignette($id) {
    	$id = intval($id);
    	include("connexion.php");
    	$req = "SELECT photo_blob, photo_type FROM produits WHERE id = ".$id;
    	$ret = mysql_query($req) or die (mysql_error());
    	$col = mysql_fetch_row($ret);
    	$file = fopen("photo$id.tmp", 'w+');
    	fwrite($file, $col[0]);
    	fclose($file);
    	$file = "photo$id.tmp"; 
    	list($width, $height) = getimagesize($file);
    	$s = ($width>$height)?'width="100"':'height="100"';
    	$s = '<img src="photo.php?id='.$id.'" '.$s.'>';
    	return $s;
    }
    Merci !

    Un dernier truc...

    Comme vous le voyez, je n'efface pas le fichier créé... Par contre, impossible de le voir avec Filezilla... vous sauriez pas pourquoi ?

  14. #14
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file = fopen("photo".$id.".tmp", 'w+');

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo