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

Résolu/Fermé
Gilledunord Messages postés 49 Date d'inscription vendredi 11 avril 2008 Statut Membre Dernière intervention 27 mars 2013 - 1 août 2011 à 12:17
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 18 août 2011 à 19:00
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.



A voir également:

2 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
1 août 2011 à 13:30
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.");
}
?> 
0
Gilledunord Messages postés 49 Date d'inscription vendredi 11 avril 2008 Statut Membre Dernière intervention 27 mars 2013 2
1 août 2011 à 18:40
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.



-1
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
18 août 2011 à 19:00
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 :)
0