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 25/01/2011, 11h55   #1
Futur Membre du Club
 
Inscription : mai 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 61
Points : 15
Points : 15
Par défaut Redimensionnement d'images gif

Bonjour,
Dans une page web, genre galerie photos, j'affiche une image de grande taille et plusieurs de petite taille. Quand on passe le curseur sur une petite image, elle remplace la grande. Rien de sorcier, 3 lignes de javascript et c'est ok.

Oui, mais a condition que l'on télécharge directement toutes les images en grande taille en laissant à la machine du client le soin de faire les réductions nécessaires, d'où temps de téléchargement et charge de la machine du client qui n'est pas forcément musclée.

Autre solution : avoir sur le serveur un répertoire pour les photos de grande taille et un autre pour les petites. Mais pour cela, il me faut reprendre un bon millier de photos pour les redimensionner.

Enfin, une solution plus "reposante" consiste à faire faire le travail par le serveur en lui faisant redimensionner les photos quand on en a besoin : c'est une grosse machine qui fait ça sans sourciller (je n'ennuie personne puisque je suis sur un serveur dédié), je n'ai pas à reprendre mes photos et le temps de transmission est bon. Voila la fonction que j'utilise pour ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function reduire_photo($ad,$larg,$rep,$ext){
      list($width, $height) = getimagesize($ad);
      $newwidth = $larg;
      $newheight =(int)($height*$larg/$width);
      $a=explode("/",$ad);
      $l=count($a)-1;
      $adresse_photo_r=$rep.$a[$l];
      $thumb = imagecreatetruecolor($newwidth, $newheight);
      if($ext=="gif") $source = imagecreatefromgif($ad);
      if($ext=="jpg") $source = imagecreatefromjpeg($ad);
     imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
      if($ext=="gif") imagegif($thumb,$adresse_photo_r);
      elseif($ext=="jpg") imagejpeg($thumb,$adresse_photo_r);
      imagedestroy($thumb);
      return $adresse_photo_r;
}
$ad, l'adresse de la photo à redimensionner,
$lar, le "width" de la photo redimensionnée,
$rep, le chemin du sous répertoire où je veux enregistrer les photos redimensionnées,
enfin $ext le type de photo (gif ou jpeg)

Pas de problème, ça marche, après avoir ajouté ini_set("memory_limit","64M"); pour ne pas avoir une kyrielle de warning, sauf que les photos gif dont l'arrière plan est transparent ressorte avec un fond noir.
tim1789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 15h39   #2
Futur Membre du Club
 
Inscription : mai 2007
Messages : 61
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 61
Points : 15
Points : 15
Je reviens donner la solution que je viens de trouver dans http://fr.php.net/manual/fr/function...opyresized.php, car je pense que ça peut aider certains

Code :
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
26
27
28
29
30
31
 
function reduire_photo($ad,$larg,$rep,$ext){
  list($width, $height) = getimagesize($ad);
  $newwidth = $larg;
  $newheight =(int)($height*$larg/$width);
  $a=explode("/",$ad);
  $l=count($a)-1;
  $adresse_photo_r=$rep.$a[$l];
  $thumb = imagecreatetruecolor($newwidth, $newheight);
  if($ext=="gif") $source = imagecreatefromgif($ad);
  if($ext=="jpg") $source = imagecreatefromjpeg($ad);      
  $originaltransparentcolor = imagecolortransparent( $source );
  if($originaltransparentcolor >= 0 // -1 pour opaque
    && $originaltransparentcolor < imagecolorstotal( $source ))
  {
    $transparentcolor = imagecolorsforindex( $source, $originaltransparentcolor );
    $newtransparentcolor = imagecolorallocate(
      $thumb,
      $transparentcolor['red'],
      $transparentcolor['green'],
      $transparentcolor['blue']
    );
    imagefill( $thumb, 0, 0, $newtransparentcolor );
    imagecolortransparent( $thumb, $newtransparentcolor );
  }                   
  imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  if($ext=="gif") imagegif($thumb,$adresse_photo_r);
  elseif($ext=="jpg") imagejpeg($thumb,$adresse_photo_r);
  imagedestroy($thumb);
  return $adresse_photo_r;
}
tim1789 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 02h54.


 
 
 
 
Partenaires

Hébergement Web