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

Langage PHP Discussion :

Images PHP : Perte de "densité"


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Images PHP : Perte de "densité"
    Bonjour à tous,

    Mon problème porte sur la création d'images en PHP.

    Je ne suis pas un expert en PHP mais j'arrive tout de même à mettre en place la plupart des fonctions permettant de bidouiller une image (redimensionner, couper, ...).

    Ainsi, après avoir uploadé une image et en utilisant les fonctions imagecreatetruecolor() et imagejpeg( , , 100), je créé des images jpeg à partir d'autres formats (.png, .jpg, .jpeg, pour le moment...). Après je les bricole pour les adapter à mon site mais ce n'est pas le problème..

    Le problème est que lorsque j'enregistre une image avec la fonction imagejpeg( , , 100), l'image perd environ la moitié de son poids, et, par la même, une bonne partie de sa "densité". C'est à dire que les couleurs sont beaucoup plus fades, comme si on avait mis un effet de voile blanc par dessus l'image.

    Je précise que ce défaut est très légèrement perceptible, néanmoins, comme je réalise un site pour un cabinet artistique il faut que les images soient parfaites...

    Quelqu'un aurait-il une solution à ce problème ?

    Je vous remercie.

  2. #2
    Membre habitué Avatar de Cobaye
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 154
    Points
    154
    Par défaut
    je vous conseillerai plutot de regarder la fonction http://www.php.net/manual/fr/functio...yresampled.php pour régénérer vos images

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour Cobaye,

    Oui bien sûr, j'utilise cette fonction pour modifier "géométriquement" mes images, mais ce n'est hélas pas la question de mon problème

    Mon problème porte sur l'enregistrement de l'image (après l'avoir ou non modifiée géométriquement) qui lui fait perdre en qualité.

    Merci de ton aide quoi qu'il en soit

  4. #4
    Membre habitué Avatar de Cobaye
    Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Points : 154
    Points
    154
    Par défaut
    Pouvez vous mettre votre script ?

    voici un bout d'une méthode que j'utilise et pas eu de prob de qualité

    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
    static public function Image_crop($chemin, $left, $top, $right, $bottom, $IdPhoto){
    		$nom_fichier = basename($chemin);
    		$nouveau_fichier = "../"._REP_CACHE_.$nom_fichier;
     
    		$originalImg = ImageCreateFromJpeg($chemin);
    		$newImg = ImageCreateTrueColor(_MINIATURE_MAX_X_, _MINIATURE_MAX_Y_);
     
    		imagecopyresampled ($newImg, $originalImg, 0, 0, $left, $top, _MINIATURE_MAX_X_, _MINIATURE_MAX_Y_, $right, $bottom);
     
    		// Affichage de l'image
    		imagejpeg($newImg, $nouveau_fichier);
     
    		// Libération de la mémoire
    		imagedestroy($newImg);
     
    		//tranfert FTP
    		if(Image::Transfert_ftp($nouveau_fichier, $nom_fichier, _FTP_DIR_MINIATURE_)){
    			//suppression de l'image physique en cache
    			if(!Image::Supprimer_fichier($nouveau_fichier)) echo "Erreur lors de la suppression de l'image dans la cache";
    			//mise a joru dans al base
    			Image::Enregistrement_miniature($nom_fichier, $IdPhoto);
    		}else{
    			echo "Erreur lors du transfert de l'image";
    		}
    	}

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    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
    if ($extension_upload == 'png') $source = imagecreatefrompng($_POST['id'].'/'.$nom_image.'.'.$extension_upload); 
    else $source = imagecreatefromjpeg($_POST['id'].'/'.$nom_image.'.'.$extension_upload); 
    $largeur_source = imagesx($source);
    $hauteur_source = imagesy($source);
    $rapport_source = $largeur_source / $hauteur_source;
    if ($rapport_source >= 1.49) {
    	$destination = imagecreatetruecolor(1000, ceil(1000*$hauteur_source/$largeur_source)); // On crée la photo "destination" vide
    } else {
    	$destination = imagecreatetruecolor(ceil(670*$largeur_source/$hauteur_source), 670);
    }
    $largeur_destination = imagesx($destination);
    $hauteur_destination = imagesy($destination);
    if ($largeur_source > 1000 || $hauteur_source > 670) { // si la photo ne rentre pas dans le cadre du site...
    	// On crée la photo
    	imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
    	// On enregistre la photo en jpg"
    	imagejpeg($destination, $_POST['id'].'/'.$nom_image.'.jpg',100);
    } else imagejpeg($source, $_POST['id'].'/'.$nom_image.'.jpg',100); //on converti quand même le png éventuel en jpg..
    unlink($_POST['id'].'/'.$nom_image.'.png');
    Et voilà que le fichier obtenu avec la fonction imagejpeg() est plus léger que le fichier d'origine (même sans redimensionner), et qu'il a des couleurs beaucoup plus pâles..

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Est-ce si incompréhensible que ça ?

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