8791 sujets

Développement web côté serveur, CMS

Bonjour,
j'ai un problème avec un redimensionnement d'image jpeg.

une fois redimensionnées mes vignettes au format Jpeg perdent trop de qualité et les couleurs bavent

j'ai fais un tour sur le net ... de quelques heures * plusieurs jours et je ne trouve toujours rien.

j'ai pourtant changé les "imagecreate()" par des "imagetruecolor()" et remplacé "imagecopyresized()" par "imagecopyresampled()".

la je suis complètement paumé et un petit coup de main de ne serait pas de refus.

merci d'avance.

voila le code:


<?php
/*
 * but = redimensionnement automatique des images
 *
 */
function fonc_redim($img,$size,$pos) {
	//echo "IMG : ".$img."<br />";
	$image_dim = getimagesize($img);
	//choix de l'orientation de l'image	   
	if($pos = width) {
		// x est plus grand que y
		$new_x = $size;
		$new_y = ceil($image_dim[1]/($image_dim[0]/$size));
	}else {
		if($pos = height) {
			// y est plus grand que x
		    $new_y = $size;
		    $new_x = ceil($image_dim[0]/($image_dim[1]/$size));
		}else{
		    // x == y
			$new_x = $size;
		    $new_y = $size;
		}
	}	   
		   
	//redimensionnement de l'image
	/*$new_y = $size;
	$new_x = $image_dim[0]/($image_dim[1]/$size);
     */
	$extension = substr(strrchr(basename($img), "."), 1 );
	$chaine = substr($img,0,-4);//enléve les 4 derniers caractères
	switch($extension){
		case "jpg":
			$old_img = imagecreatefromjpeg($img);
			$chaine.="_mini.jpg";
			break;
		case "jpeg":
			$old_img = imagecreatefromjpeg($img);
			$chaine.="_mini.jpg";
			break;
		case "gif":
			$old_img = imagecreatefromgif($img);
			$chaine.="_mini.gif";
			break;
		case "png":
			$old_img = imagecreatefrompng($img);
			$chaine.="_mini.png";
			break;
	}
    //verification
    if (!$old_img) {
    	$im = imagecreatetruecolor(150, 30); // Création d'une image blanche
        $bgc = imagecolorallocate($old_img, 255, 255, 255);
        $tc = imagecolorallocate($old_img, 0, 0, 0);
       	imagefilledrectangle($old_img, 0, 0, 150, 30, $bgc);
        // Affichage d'un message d'errur
    	imagestring($old_img, 1, 5, 5, "Erreur de chargement de l'image $img", $tc);
    	return $old_img;
    }
          
    $new_img = imageCreatetruecolor($new_x, $new_y);
    imagecopyresampled ($new_img, $old_img,0,0,0,0,$new_x,$new_y,$image_dim[0],$image_dim[1]);
	switch($extension){
		case "jpg":
			imagejpeg($new_img,$chaine);
			break;
		case "jpeg":
			imagejpeg($new_img,$chaine);
			break;
		case "gif":
			imagegif($new_img,$chaine);
			break;
		case "png":
			imagepng($new_img,$chaine);
			break;
	}   
    imagedestroy($new_img);        
    imagedestroy($old_img);
    $adjustment = $max - $new_y;
    
    $img_x=$image_dim[0]+40;
	$img_y=$image_dim[1]+40;
    		
    return $chaine ."\" onclick=\"open('./image.php?im=".$img."', 'new', 'toolbar=no,location=no, directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes, Width=$img_x, Height=$img_y')";    
}

?> 

Modifié par adlteam (28 Apr 2008 - 17:58)
merci de ta réponse...

mais tu vas me prendre pour un noob mais je ne comprend pas ta réponse ;(

pourrais-tu préciser, s'il te plait?

Merci d'avance
dans la documentation php http://fr2.php.net/manual/fr/function.imagejpeg.php
le 3eme parametre de la fonction est le paramtere quality
a écrit :
quality est optionnel, et prend des valeurs entières de 0 (pire qualité, petit fichier) et 100 (meilleure qualité, gros fichier). Par défaut, la valeur est celle de la qualité IJG (75).


pour ma part j'utilise 80 et le resultat est satisfaisant en terme de qualite et de poids de l'image generee
ce qui te fera:
imagejpeg($new_img,$chaine,80);
Pour ma part j'ai beau mettre le 3ème paramètre, l'image est toujours
d'aussi mauvaise qualité.

edit :*** bon je m'écrase ***

j'ai changé imagecreate(), par imagecreatetruecolor() ... forcément ca change du tout au tout.

ça m'apprendra à lire les post en diagonal tiens
Merci quand même.
Modifié par kptenix (25 Apr 2008 - 09:34)
Bonjour,
j'ai beau essayer de modifier le troisième paramètre (qualité) mais la qualité est toujours aussi crade.

il est évident que pour vérifier j'ai re-créé mes miniatures avec mon script.

donc pour le moment je tourne avec la lib GD 2.0.35 et rien ne change.

donc si vous avez une autre idée afin que je puisse mettre le resolu devant ce topic n'hésitez pas.

je continue mes recherche dans tous les cas


merci d'avance....
Administrateur
as-tu indiqué au moins 90 ou 100 ?

ps : balises [ code ] dans le premier post, merci...
Modérateur
Salut,

Si ton image de départ est vraiment en basse résolution (ex : L 40px, H 40px). Tu ne peux rien faire et ton image n'est pas exploitable sur d'autre résolution Smiley cligne . As tu fait un test de "redimension" sur un logiciel de traitement d'image ?

@+
Modifié par Nolem (28 Apr 2008 - 15:29)
Hello,

j'ai enfin trouvé mon erreur...je vais passer pour un boulet mais bon tant pis.

pour ce qui est de renommer les fonction ça marche du tonnerre, et de plus la 3ème paramètre donne l'impression de modifier la qualité.
comme mes vignettes sont petites il n'y a pas vraiment de différence.

mon erreur vient du fait que j'avais stylisé les images au moyen de ma css il y a bien longtemps et j'avais complètement oublié un petit width="200px";

c'est à cause de ça que j'avais des images crades après les avoir redimmensionnées. une fois le width supprimé et après avoir rechargé mes images sur mon serveur je n'avais plus d'images crades.

encore merci pour votre aide.