redimensionement d'une image propre...

redimensionement d'une image propre... - PHP - Programmation

Marsh Posté le 29-10-2003 à 08:27:33    

Voilà, j'ai une image envoyé par un user et je voudrais la redimensionné automatiquement, mais il se trouve que, une fois cette redimension faîtes, la nouvelle image est déguelasse ??
 
vous pouvez me donner des indices ??
 
NB : si vous voulez le code, signifiez le moi, merci

Reply

Marsh Posté le 29-10-2003 à 08:27:33   

Reply

Marsh Posté le 29-10-2003 à 09:37:12    

Y a deja eu des topic sur ce sujet...  
 
moi j'utilise la fct donnée par z0rglub qu'il utilise dans son appli php de galerie d'image....  
 
 

Code :
  1. <?
  2. //Cree des image minatures
  3. function RatioResizeImg( $image, $newWidth, $newHeight, $path)
  4. {
  5. // chemin complet de l'image :
  6. $chemin = $path.$image;
  7. // détéction du type de l'image
  8. eregi("(...)$",$chemin,$regs);
  9. $type = $regs[1];
  10. switch( $type )
  11.  case "gif": $srcImage = @imagecreatefromgif( $chemin ); break
  12.  case "jpg": $srcImage = @imagecreatefromjpeg( $chemin ); break
  13.  case "png": $srcImage = @imagecreatefrompng( $chemin ); break
  14.  default : unset( $type ); break;
  15.  
  16. if( $srcImage )
  17. {
  18.  // hauteurs/largeurs
  19.  $srcWidth = imagesx( $srcImage ); 
  20.  $srcHeight = imagesy( $srcImage ); 
  21.  $ratioWidth = $srcWidth/$newWidth;
  22.  $ratioHeight = $srcHeight/$newHeight;
  23.  
  24.  // taille maximale dépassée ?
  25.  if (($ratioWidth > 1) || ($ratioHeight > 1))
  26.  {
  27.   if( $ratioWidth < $ratioHeight)
  28.   { 
  29.    $destWidth = $srcWidth/$ratioHeight;
  30.    $destHeight = $newHeight; 
  31.   }
  32.   else
  33.   { 
  34.    $destWidth = $newWidth; 
  35.    $destHeight = $srcHeight/$ratioWidth;
  36.   }
  37.  }
  38.  else
  39.  {
  40.   $destWidth = $srcWidth;
  41.   $destHeight = $srcHeight;
  42.  }
  43.  $destImage = imagecreatetruecolor( $destWidth, $destHeight); 
  44.  imagecopyresampled( $destImage, $srcImage, 0, 0, 0, 0, $destWidth,$destHeight,$srcWidth,$srcHeight );
  45.  $dest_file  = $path.$image;
  46.  switch( $type )
  47.  { 
  48.   case "gif": imagegif($destImage, $dest_file); break
  49.   case "jpg": imagejpeg($destImage, $dest_file);  break
  50.   case "png": imagepng($destImage, $dest_file); break
  51.   default : unset( $type ); break;
  52.  } 
  53.  imagedestroy( $srcImage );
  54.  imagedestroy( $destImage );
  55.   
  56.  return $dest_file;
  57. }
  58. }
  59. ?>


 
 
Elle les miniature sont ok.
a+


Message édité par _maximus_ le 29-10-2003 à 09:37:48

---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 29-10-2003 à 09:42:26    

_Maximus_ a écrit :

Y a deja eu des topic sur ce sujet...  
 
moi j'utilise la fct donnée par z0rglub qu'il utilise dans son appli php de galerie d'image....  
 
 

Code :
  1. <?
  2. //Cree des image minatures
  3. function RatioResizeImg( $image, $newWidth, $newHeight, $path)
  4. {
  5. // chemin complet de l'image :
  6. $chemin = $path.$image;
  7. // détéction du type de l'image
  8. eregi("(...)$",$chemin,$regs);
  9. $type = $regs[1];
  10. switch( $type )
  11.  case "gif": $srcImage = @imagecreatefromgif( $chemin ); break
  12.  case "jpg": $srcImage = @imagecreatefromjpeg( $chemin ); break
  13.  case "png": $srcImage = @imagecreatefrompng( $chemin ); break
  14.  default : unset( $type ); break;
  15.  
  16. if( $srcImage )
  17. {
  18.  // hauteurs/largeurs
  19.  $srcWidth = imagesx( $srcImage ); 
  20.  $srcHeight = imagesy( $srcImage ); 
  21.  $ratioWidth = $srcWidth/$newWidth;
  22.  $ratioHeight = $srcHeight/$newHeight;
  23.  
  24.  // taille maximale dépassée ?
  25.  if (($ratioWidth > 1) || ($ratioHeight > 1))
  26.  {
  27.   if( $ratioWidth < $ratioHeight)
  28.   { 
  29.    $destWidth = $srcWidth/$ratioHeight;
  30.    $destHeight = $newHeight; 
  31.   }
  32.   else
  33.   { 
  34.    $destWidth = $newWidth; 
  35.    $destHeight = $srcHeight/$ratioWidth;
  36.   }
  37.  }
  38.  else
  39.  {
  40.   $destWidth = $srcWidth;
  41.   $destHeight = $srcHeight;
  42.  }
  43.  $destImage = imagecreatetruecolor( $destWidth, $destHeight); 
  44.  imagecopyresampled( $destImage, $srcImage, 0, 0, 0, 0, $destWidth,$destHeight,$srcWidth,$srcHeight );
  45.  $dest_file  = $path.$image;
  46.  switch( $type )
  47.  { 
  48.   case "gif": imagegif($destImage, $dest_file); break
  49.   case "jpg": imagejpeg($destImage, $dest_file);  break
  50.   case "png": imagepng($destImage, $dest_file); break
  51.   default : unset( $type ); break;
  52.  } 
  53.  imagedestroy( $srcImage );
  54.  imagedestroy( $destImage );
  55.   
  56.  return $dest_file;
  57. }
  58. }
  59. ?>


 
 
Elle les miniature sont ok.
a+


 
Oui enfin... Z0rglub a rien inventé hein...  [:totozzz]  
 
Il a juste pris le temps de lire la doc et compris que imagecopyresample fait le meilleur boulot.  :D

Reply

Marsh Posté le 29-10-2003 à 10:06:24    

mouais.......... avec imagecopyresampled, la qualité n'est pas si meilleure que ça...

Reply

Marsh Posté le 29-10-2003 à 10:15:27    

xkamui a écrit :

mouais.......... avec imagecopyresampled, la qualité n'est pas si meilleure que ça...


 
ça va aussi dépendre de la qualité de ton image de départ... Chez moi, ça donne des résultats aussi bon qu'avec photoshop pour le redimensionnement.

Reply

Marsh Posté le 30-10-2003 à 10:04:09    

xkamui a écrit :

mouais.......... avec imagecopyresampled, la qualité n'est pas si meilleure que ça...


 
Ben dans ce cas va falloir que tu trouves un algo d'antialiasing sur le net  [:spamafote]  
Moi en tout cas elles me conviennent ces miniatures.


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 30-10-2003 à 10:04:45    

Hermes le Messager a écrit :


 
ça va aussi dépendre de la qualité de ton image de départ... Chez moi, ça donne des résultats aussi bon qu'avec photoshop pour le redimensionnement.
 


 
Moi aussi  [:spamafote]


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 30-10-2003 à 21:05:30    

Avec imagecopyresampled(), la qualité des miniatures est bonne chez moi.
Par contre, qu'est-ce que c'est long pour générer ces miniatures. :o 8 à 10 secondes pour en générer une trentaine. :/

Reply

Marsh Posté le 30-10-2003 à 21:38:31    

Tranxen_200 a écrit :

Avec imagecopyresampled(), la qualité des miniatures est bonne chez moi.
Par contre, qu'est-ce que c'est long pour générer ces miniatures. :o 8 à 10 secondes pour en générer une trentaine. :/


 
C'est quoi ton serveur ?? Un 486DX ou quoi ?  :D

Reply

Marsh Posté le 30-10-2003 à 22:24:51    

Hermes le Messager a écrit :


 
C'est quoi ton serveur ?? Un 486DX ou quoi ?  :D  


J'ai pas essayé en local, à vrai dire. [:mlc]
Le site est hébergé chez OVH et c'est là que c'est lent. :p

Reply

Marsh Posté le 30-10-2003 à 22:24:51   

Reply

Marsh Posté le 30-10-2003 à 22:29:23    

Tranxen_200 a écrit :


J'ai pas essayé en local, à vrai dire. [:mlc]
Le site est hébergé chez OVH et c'est là que c'est lent. :p


 
OVH exagère en ce moment. Leurs serveurs sont de + en + lents.  :)  Je peux te dire qu'en local, faire une 40aine d'images prend pas du tout le temps que tu dis.

Reply

Marsh Posté le 30-10-2003 à 23:14:20    

Hermes le Messager a écrit :


 
OVH exagère en ce moment. Leurs serveurs sont de + en + lents.  :)  Je peux te dire qu'en local, faire une 40aine d'images prend pas du tout le temps que tu dis.  


J'avais fais un test (pour m'amuser  :whistle: ) chez Free.  
Inutile de te donner le résultat...  :D  
Faudra que j'installe GD sur mon serveur Apache en local et que j'essaye.

Reply

Marsh Posté le 31-10-2003 à 08:37:46    

D'ailleurs on peut trouver GD ou ?

Reply

Marsh Posté le 31-10-2003 à 10:59:53    

Joel F a écrit :

D'ailleurs on peut trouver GD ou ?


 
Bah c comprisdans easy php non??
 
Me trompe-je?  :??:


---------------
Ptit con de goret je t'emmerde ^_^
Reply

Marsh Posté le 31-10-2003 à 11:00:56    

ah bon ???
af, je vais voir ca

Reply

Marsh Posté le 31-10-2003 à 12:29:01    


Vas voir le code de J-Browser http://jpage.free.fr/j/index_fr.php?p=jscripts , il a un script pour redimensionner les images qui marche pas mal et qui permet de modifier le taux de compression (en jpg)
 

Reply

Marsh Posté le 31-10-2003 à 13:33:07    

Joel F a écrit :

ah bon ???
af, je vais voir ca


En fait, dans le répertoire racine d'EasyPhp, il faut ouvrir phpini.exe et cocher gd, gd_gif et/ou gd2 (selon la version voulue).
Par contre, si cela ne marche pas, c'est que GD n'est pas installé. Il faut lancer Apache seul pour voir les messages d'erreur.

Reply

Marsh Posté le 02-11-2003 à 16:42:32    

Code :
  1. switch( $type )
  2.   { 
  3.    case "gif": imagegif($destImage, $dest_file); break
  4.    case "jpg": imagejpeg($destImage, $dest_file);  break
  5.    case "png": imagepng($destImage, $dest_file); break
  6.    default : unset( $type ); break;
  7.   }


 
imagegif, imagejpeg, imagepng, elles sont où ces fonctions? Parce que Fatal error: Call to undefined function: imagegif() in ****** on line 57

 :sweat:  :??:

Reply

Marsh Posté le 02-11-2003 à 16:43:30    

aspegic500mg a écrit :

Code :
  1. switch( $type )
  2.   { 
  3.    case "gif": imagegif($destImage, $dest_file); break
  4.    case "jpg": imagejpeg($destImage, $dest_file);  break
  5.    case "png": imagepng($destImage, $dest_file); break
  6.    default : unset( $type ); break;
  7.   }


 
imagegif, imagejpeg, imagepng, elles sont où ces fonctions? Parce que Fatal error: Call to undefined function: imagegif() in ****** on line 57

 :sweat:  :??:  


 
Le gif n'est plus supporté dans GD (enfin si, mais seulement en lecture). Cf : manuel.

Reply

Marsh Posté le 02-11-2003 à 16:45:01    

Hermes le Messager a écrit :


 
Le gif n'est plus supporté dans GD (enfin si, mais seulement en lecture). Cf : manuel.
 


 
okkk :sleep:  
 
Ben je vais tester avec un jpeg alors :jap:  :hello:
 
edit: je peux lire un gif (mon image actuelle) et generer un jpeg en miniature? :??:


Message édité par aspegic500mg le 02-11-2003 à 16:45:34
Reply

Marsh Posté le 02-11-2003 à 16:47:51    

aspegic500mg a écrit :


 
okkk :sleep:  
 
Ben je vais tester avec un jpeg alors :jap:  :hello:
 
edit: je peux lire un gif (mon image actuelle) et generer un jpeg en miniature? :??:  


 
voui   :D  Mais dans bcp de cas, le png est préférable, sauf si tu veux avoir une couleur identique avec d'autres éléments graphiques en Jpeg dans la page. (bug des couleurs avec IE).
 

Reply

Marsh Posté le 02-11-2003 à 16:50:15    

Hermes le Messager a écrit :


 
voui   :D  Mais dans bcp de cas, le png est préférable, sauf si tu veux avoir une couleur identique avec d'autres éléments graphiques en Jpeg dans la page. (bug des couleurs avec IE).
 


 
Euh dans ce cas si le type de fichier à lire est gif ou png je genere un png, et si c'est un jpeg je genere jpeg? :)

Reply

Marsh Posté le 02-11-2003 à 16:51:27    

Reply

Marsh Posté le 02-11-2003 à 16:52:08    

Hermes > pour le "bug" du PNG dans IE il suffit de virer les infos de gamma, je l'ai déjà fait (pas en PHP :/) et du coup les couleurs correspondent.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-11-2003 à 17:07:09    

Warning: imagejpeg(): Unable to open './images-produits/voiture.jpg' for writing in ******* on line 58
 
J'ai l'image mais pas reduite, il me l'affiche en format reel :heink:  :pt1cable:  
 
Il manquerait l'accés en ecriture sur voiture.jpg? :??: (ca voudrait dire qu'il reecrit la miniature sur le fichier? :heink: )

Reply

Marsh Posté le 02-11-2003 à 17:11:34    

Euh en fait j'ai dû me planter dans l'utilisation de la fonction, elle retourne l'image et pas son nom :sleep:

Reply

Marsh Posté le 02-11-2003 à 17:20:08    

antp a écrit :

Hermes > pour le "bug" du PNG dans IE il suffit de virer les infos de gamma, je l'ai déjà fait (pas en PHP :/) et du coup les couleurs correspondent.


 
Tu fais ça comment ? Avec les CSS ? Parce que là tu m'intéresses bcp étant donné que dans mon dernier site (à la demande de la cliente), le menu est constitué d'image avec un fond. Hors comme ce font ne pouvait pas correspondre avec le fond global, j'ai été obligé d'opter pour du Jpeg.  :sweat:

Reply

Marsh Posté le 02-11-2003 à 17:23:26    

Je suis pas sûr de ma maniere d'utiliser la fonction, comment vous l'utilisez :??: (disons que vous generez quoi comme code html?)

Reply

Marsh Posté le 02-11-2003 à 17:24:50    

aspegic500mg a écrit :

Je suis pas sûr de ma maniere d'utiliser la fonction, comment vous l'utilisez :??: (disons que vous generez quoi comme code html?)


 
Quelle fonction ? Fais toi même la fonction en t'aidant avec le manuel php et ses exemples. C'est la seule manière de réellement comprendre. J'y suis passé moi aussi. ;)

Reply

Marsh Posté le 02-11-2003 à 17:29:15    

Hermes le Messager a écrit :


 
Quelle fonction ? Fais toi même la fonction en t'aidant avec le manuel php et ses exemples. C'est la seule manière de réellement comprendre. J'y suis passé moi aussi. ;)
 


 
Faut surtout que je comprenne l'utilisation exacte de imagecreatetruecolor() et imagecopyresampled() car le reste de la fonction est assez simple :pt1cable:
 
edit: quelle fonction? ==> celle affichée sur le topic :D
 
edit: je lis et je comprend enfin comment fonctionne ces deux là :)


Message édité par aspegic500mg le 02-11-2003 à 17:47:51
Reply

Marsh Posté le 02-11-2003 à 17:56:43    

Ca y'est j'ai tout compris comment ca marche, lé bien le manuel php. :)  
Et ca marche aussi dans mon script, fallait juste mettre les droits d'ecriture pour tous sur les fichiers images :cry: (ca pause pas un blem de laisser l'ecriture à tout le monde? :heink: )
 
Par contre probleme, ca m'ecrase le fichier image de depart avec la miniature, donc va falloir que je crée un nouveau fichier avec le prefixe "mini" devant :pt1cable:

Reply

Marsh Posté le 02-11-2003 à 18:24:25    

Hermes le Messager a écrit :


 
Tu fais ça comment ? Avec les CSS ? Parce que là tu m'intéresses bcp étant donné que dans mon dernier site (à la demande de la cliente), le menu est constitué d'image avec un fond. Hors comme ce font ne pouvait pas correspondre avec le fond global, j'ai été obligé d'opter pour du Jpeg.  :sweat:  


 
Pas en CSS, faut modifier les fichiers avant de les mettre en ligne
 
http://entropymine.com/jason/tweakpng/
 
Tu supprimes les items "gAMA" ;)
 
Ça a marché pour les fichiers issus de Paint Shop Pro sur lesquels j'ai testé ça


Message édité par antp le 02-11-2003 à 18:25:05

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-11-2003 à 20:44:26    

antp a écrit :


 
Pas en CSS, faut modifier les fichiers avant de les mettre en ligne
 
http://entropymine.com/jason/tweakpng/
 
Tu supprimes les items "gAMA" ;)
 
Ça a marché pour les fichiers issus de Paint Shop Pro sur lesquels j'ai testé ça


 
Arf ok, mais inutile dans mon cas, vu que je génère les images dynamiquement. Dommage donc... Ma solution était donc la seule possible dans mon cas.

Reply

Marsh Posté le 02-11-2003 à 20:49:54    

Bah en PHP ça peut peut-être se faire


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-11-2003 à 20:51:19    

antp a écrit :

Bah en PHP ça peut peut-être se faire


 
A condition d'avoir la main complête sur le serveur pour installer un prog externe. Dans mon cas, ce n'est pas le cas.

Reply

Marsh Posté le 02-11-2003 à 20:59:55    

Peut-être avec ça :
http://be2.php.net/manual/en/funct [...] orrect.php
en mettant le gamma à 0 ?
 
edit: non, ça n'a pas l'air d'être lié aux PNG en particulier, ça doit pas être ça


Message édité par antp le 02-11-2003 à 21:03:11

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 02-11-2003 à 21:05:33    

Sinon tu peux tj rechercher le chunk "gAMA" et le modifier (ou le supprimer) dans l'image :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed