Réduire la résolution d'image en php

Résolu/Fermé
Messages postés
49
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
27 mars 2013
-
Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
-
Bonjour

En partant d'une image (exemple) de dimensions 390px de large x 550px de hauteur.
Je la réduit en 80px de largeur ou de 110 de hauteur et cela fonctionne bien sous IE, par contre sur Firefox l'image réduite de cette façon donne un flou ou une image imparfaite.

Mon script de réduction en PHP mais sur les dimensions de l'image, exemple :
  <?php 
    $image = @getImageSize('imgmusiquedvd/'.$resultat['fichiermusique'].'');
    $largeur = $image[0]; // largeur de l'image
    $hauteur = $image[1]; // hauteur de l'image

  if ($largeur > '80')
 { 
   echo '<img ="imgmusiquedvd/'.$resultat['fichiermusique'].'" width="80" alt="" border="0">';
     }
     else if ($hauteur > '110')
      {     
	 echo '<img ="imgmusiquedvd/'.$resultat['fichiermusique'].'" height="110" alt="" border="0">'; 
      }
   else { 
   echo '<img src="imgmusiquedvd/'.$resultat['fichiermusique'].' " alt="" border="0">';
  }
?>

La solution serait (en script PHP pour que cela se fasse automatiquement) de connaître la résolution de l'image d'origine, pour ensuite réduite cette résolution qui donnerait une plus nette image sur Firefox.

Ma question :
Comment obtenir la résolution (au lieu des dimensions) pour la réduire ?

Merci pour votre aide.



2 réponses

Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
420
Si tu met juste un paramètre width="80" sur la balise img, c'est le navigateur qui va "retaillé" l'affichage de l'image.

Ce n'est pas génial car il va devoir quand même téléchargé toute l'image et si elle est grande ça va peser lourd sur la bande passante si tu fait par exemple une gallerie de 50 photos de bonne qualité.

Du coup je te conseille plutôt de retaillé l'image du côté du serveur par le biais de la librairie GD (fait un phpinfo(); pour savoir si tu l'a).

Voici un exemple de code que je te laisse adapter à tes besoins, ici moi je génère l'image miniature que si elle n'existe pas, sinon j'envoie celle qui existe déjà (afin d'éviter tout le boulot à chaque fois).

Attention aux failles (possibilité de changer le $_GET du lien et d'ainsi charger un autre fichier.

<?php
// The file you are resizing
$file = $_GET['img'];

if(file_exists("./map/".$file))
{
	if(!file_exists("./map/thumbs/$file"))
	{
		// This sets it to a .jpg, but you can change this to png or gif
		//header('Content-type: image/jpeg');
		// Setting the resize parameters
		list($width, $height) = getimagesize("./map/".$file);
		$modwidth = 278;	//$width * $size;
		$modheight = 155;	//$height * $size;

		// Resizing the Image
		$tn = imagecreatetruecolor($modwidth, $modheight);
		$image = imagecreatefromjpeg("./map/".$file);
		imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);

		// Outputting a .jpg, you can make this gif or png if you want
		//notice we set the quality (third value) to 100
		//imagejpeg($tn, null, 80);
		imagejpeg($tn, "./map/thumbs/$file", 80);
		imagedestroy($tn);
	}
	header("Content-type: image/jpeg");
	readfile("./map/thumbs/$file");
}
else
{
	die($_GET['img']." not found.");
}
?> 
Messages postés
49
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
27 mars 2013
3
Bonsoir scriptiz

En fait mes images sont uploadés en partie "administration" et les liens pour récupérer les images sont dans une base MySQL.

Le script ce que tu donnes marche mais il réduit définitivement l'image.
Car j'utilisai la même image miniaturisée avec le width="80" comme lien vers l'image non miniaturisée.

Donc avec ton code qui me donne quand même satisfaction, je vais uploader l'image vers deux endroits différents, l'une qui doit rétrécir dans un répertoire "miniature" et l'autre dans un répertoire "originale"

Je te remercie beaucoup pour ton aide qui résolut mon problème.



Messages postés
1420
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
14 mai 2013
420
C'est exactement ce que je fais aussi :) un répertoire miniatures où sont générées les miniatures des grosses images, et quand on clique sur la miniature ça envoie vers l'image taille réelle.

Et hop économie de bande passante :)