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] Une utilisation en boucle altère-t-il la qualité ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut [GD] Une utilisation en boucle altère-t-il la qualité ?
    Salut a tous,

    j'ai une petite question. Imaginons que je crée une image avec GD à partir d'une autre image. (je redimensionne et change la qualité).

    Mettons que je refasse le meme traitement à l'image obtenu et ce plusieurs fois.

    La qualité se verra-t-elle diminué ou celà n'aura pas d'influence?

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Points : 557
    Points
    557
    Par défaut
    salut,

    je dirais que ca dépend des traitements que tu effectues sur l'image, mais si ce sont des redimensionnements par exemple, c'est d'office destructeur, GD ou autre...

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par bkill
    salut,

    je dirais que ca dépend des traitements que tu effectues sur l'image, mais si ce sont des redimensionnements par exemple, c'est d'office destructeur, GD ou autre...

    Oui mais si on redimensionne une image de la meme taille.

    En fait j'ai un formulaire qui récupert les image et leurs fait ce traitement:

    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
     
    <?php
    function thumbmail($filename,$newwidth,$newheight,$qualite,$titre,$type2)
    {
    	list($width, $height,$type,$att) = getimagesize($filename);
    	switch ($type)
            {
    			case 1 :
    		        $mime = 'gif';
    				$thumb = imagecreatetruecolor($newwidth, $newheight);
    				$image=imagecreatefromgif($filename);
    			break ;
    	        case 2 :
    		        $mime = 'jpeg';
    				$thumb = imagecreatetruecolor($newwidth, $newheight);
    				$image=imagecreatefromjpeg($filename);
    	        break ;	
            }
     
    	imagecopyresampled($thumb,$image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
    	imagejpeg($thumb,'../images/thumb/'.$type2.'/'.$titre.'.'.$mime,$qualite);
    }
    ?>
    Je les redimensionne donc et modifie la qualité avec imagejpeg.

    Le problème est que je peut revenir sur le formulaire pour modifier des données. Lorsque je reposte les images ressubissent le même traitement (donc sont deja de la bonne taille) mais resubiront le imagecopyresampled et le imagejpeg.

    A force la qualité ne deviendra-t-elle pas de plus en plus médiocre?

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    Pour tester j'ai essayé de faire un petit script tout bête :

    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
    $filename = "maquette2.jpg";
     
    for ($i = 0 ; $i < 20 ; $i++) {
      list($width, $height,$type,$att) = getimagesize($filename);
     
      $thumb = imagecreatetruecolor($width, $height);
      $image = imagecreatefromjpeg($filename);
     
      imagecopyresampled($thumb, $image, 0, 0, 0, 0, $width, $height, $width, $height);
      imagejpeg($thumb, "maquette2.jpg", 80);
     
      echo "$i ===> ".md5(file_get_contents("maquette2.jpg"))."<br />";
     
      unset($thumb);
      unset($image);
    }
    L'utilisation de md5 permet de voir si l'image est modifiée ou si elle reste strictement identique.
    Voici le résultat que j'obtiens :

    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
    0 ===> 061d36c41d39a43c297dbb8f30cf2f76
    1 ===> 657a2988c5d3886f505bae75708bfc5c
    2 ===> 8b163ac9a72bcc9fb32404dea9d9a2c6
    3 ===> ccbd1b6896e7098b16222388ea980055
    4 ===> 99f4d7db53c3bb26a9796971c73c0374
    5 ===> 472d598df99b0889366ef85cf50d4245
    6 ===> 78c3a2e3f02e9b27992f270a7c8e2564
    7 ===> d03d696c18aa22e75b2c754a45cbca77
    8 ===> ab7677e9d464cbfe1b4fdf9ade34c37e
    9 ===> bf8cfebdc6507b744ace6940d5aef7a5
    10 ===> eed96a2fccbeddf6161cf954b519d26b
    11 ===> 8aac432d0523280b0cf199932369ac9c
    12 ===> 58638985f84ebb405510c31eee3240ef
    13 ===> 2f36e6d766ba29cd2144372c9e87aa0a
    14 ===> 501e64eae2a0c92f2a1c23bec906b135
    15 ===> 84f69dd408caacbfb655c18c379a784f
    16 ===> 7eac0907fa9e712ca97a93903bf87cb7
    17 ===> fbfee012aca0759c3ed37b2ea77f3949
    18 ===> fbfee012aca0759c3ed37b2ea77f3949
    19 ===> fbfee012aca0759c3ed37b2ea77f3949
    Comme on peut le voir l'image est effectivement modifiée un certain nombre de fois, puis au bout d'un moment elle ne l'est plus du tout.
    Cependant en regardant l'image, je constate une dégradation très nette entre l'image de départ et l'image après 20 redimensionnements.


    Pour éviter ça tu peux tout simplement rajouter dans ton code un test qui évite le redimensionnement si $width == $newwidth && $height == $newheight && $type == $type2

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Lorsque tu reviens sur la page, tu obliges ton utilisateur à renvoyer ses données ? Ne serait-il pas préférable de tout garder en session ou, mieux, en BDD ? Cela éviterait à ton internaute d'avoir des avertissements de son navigateur ainsi (surtout) que de devoir uploader à chaque fois ses images.

    Par ailleurs, dans ta situation actuelle, il me semble que si l'image est renvoyée par ton utilisateur, alors elle n'est pas redimensionnée (c'est l'image source) donc pas de souci ; dans le même ordre d'idée, si tu ne reprends pas l'image source, alors elle est déjà sur le serveur donc tu as moyen de détecter cela et de ne pas appliquer une nouvelle fois la transformation avec GD.

    Du coup, c'est un faux problème quel que soit l'angle de vue adopté


    Au passage, je rappelle la présence ce tuto en préparation : Petit cours pour éviter l'envoi POST data d'un formulaire apres un rafraîchissement

  6. #6
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Yogui
    Salut

    Lorsque tu reviens sur la page, tu obliges ton utilisateur à renvoyer ses données ? Ne serait-il pas préférable de tout garder en session ou, mieux, en BDD ? Cela éviterait à ton internaute d'avoir des avertissements de son navigateur ainsi (surtout) que de devoir uploader à chaque fois ses images.

    Par ailleurs, dans ta situation actuelle, il me semble que si l'image est renvoyée par ton utilisateur, alors elle n'est pas redimensionnée (c'est l'image source) donc pas de souci ; dans le même ordre d'idée, si tu ne reprends pas l'image source, alors elle est déjà sur le serveur donc tu as moyen de détecter cela et de ne pas appliquer une nouvelle fois la transformation avec GD.

    Du coup, c'est un faux problème quel que soit l'angle de vue adopté


    Au passage, je rappelle la présence ce tuto en préparation : Petit cours pour éviter l'envoi POST data d'un formulaire apres un rafraîchissement
    Non en fait je me suis mal expliqué, lorsqu'on reviens sur le formulaire, ce n'est pas avec un history back mais de facon voulu. Mon formulaire pour poster est le meme que celui pour modifier (celui pour modifier récuper et inser les données de la BDD).

    Par contre si je comprend bien je peut comparer 2 image avec leurs Hash md5?
    Dans ce cas je ne les compare et je fait le traitement que si le hash md5 est différent. (et donc que l'utilisateur a changé l'image).

    Par contre comment a tu fait pour hacher l'image?

    un md5(img) ? (ou img est l'adresse de l'image)?

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cela revient à ce que je disais : si c'est de manière voulue, alors tu dois être en mesure de récupérer les informations et ainsi de savoir lesquelles tu as déjà, de manière à ne pas répéter des traitements déjà effectués. Je ne comprends pas bien pourquoi tu répètes ce traitement d'image.

  8. #8
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Yogui
    Cela revient à ce que je disais : si c'est de manière voulue, alors tu dois être en mesure de récupérer les informations et ainsi de savoir lesquelles tu as déjà, de manière à ne pas répéter des traitements déjà effectués. Je ne comprends pas bien pourquoi tu répètes ce traitement d'image.
    En fait je récupert les image de la base de donnée et je les intègre au formulaire. Si le meque reposte il reposte la meme image. Mais il a également un bouton supprimer qui lui permet de virer l'image et il peut alors la remplacer.

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Cela ne répond pas à ma question : quel est l'intérêt de répéter ce traitement d'image ? Pourquoi ne pas t'en passer ?

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Yogui
    Cela ne répond pas à ma question : quel est l'intérêt de répéter ce traitement d'image ? Pourquoi ne pas t'en passer ?
    Justement c'est ce que je suis en train de faire. Je souhaite faire le traitement d'image que lorsque celle-ci est modifier. (je suis en train d'y arriver, mais a force mes formulaires deviennent un peu compliqué)

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

Discussions similaires

  1. Ecriture d'une matrice utilisant des boucles for !
    Par Mathematiker dans le forum Scilab
    Réponses: 4
    Dernier message: 26/02/2015, 21h02
  2. Réponses: 2
    Dernier message: 26/03/2013, 16h48
  3. Utilisation en boucle d'une même variable
    Par SirThanos dans le forum Android
    Réponses: 3
    Dernier message: 01/02/2013, 21h16
  4. Réponses: 24
    Dernier message: 27/04/2011, 16h00
  5. [XSL] Boucle infinie dû à une utilisation de "contains"
    Par nicolas.pied dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 25/09/2009, 10h01

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