Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/09/2006, 22h50   #1
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
Par défaut 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?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2006, 22h53   #2
Membre expérimenté
 
Développeur Web
Inscription : 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 : 538
Points : 538
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...
__________________
Merci à Microsoft pour avoir transformé un métier relativement terne et basé sur une approche bêtement technique et rigoureuse des faits, en challenge quotidien, nécessitant une remise en question permanente à l'échelle du quart d'heure
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2006, 23h05   #3
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
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 :
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?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 01h54   #4
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

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

Code :
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 :
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
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 02h39   #5
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 10h55   #6
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
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)?
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 11h21   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 12h27   #8
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
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.
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 12h36   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 12h40   #10
Membre chevronné
 
Avatar de Death83
 
Inscription : mars 2005
Messages : 1 667
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 667
Points : 746
Points : 746
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é)
__________________
manganimes (en construction) -
zemanga
Death83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h58.


 
 
 
 
Partenaires

Hébergement Web