Version complète: sur le forum Webmaster Hub : Dimensionner une image
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Gamesvideo
Bonjour, je suis en train de construire un site de téléchargement gratuit de logos - sonneries pour porbable.

Comme vous le savez les tailles d'écran diffèrent selon le modèle du portable, pour éviter de faire un travail de redimension d'image pour environ 100 modèles de portable, ce qui serait trop long et fastidieux, je souhaiterais si cela est possible de le faire automatique grâce au PHP.

Je m'explique je souhaiterais connaitre une fonction php qui serait capable de redimensionner une image et de l'enregistrer une fois dimensionné.

Par exemple j'ai une image de 800*600 pixels et je souhaite la redimensionner automatique en 128*128 pixels.

Merci d'avance de votre aide.
Compte supprimé
Salut smile.gif
Demande à notre ami commun wink.gif
Gamesvideo
Oui seulement je viens de regarder la page, et ensuite cela n'enregistre pas la page dans les dimensions que l'on souhaite avoir.
Compte supprimé
Effectivement, il faut pousser jusqu'au lien n°6 nerd.gif blush.gif
Gamesvideo
Je suis désolé mais je ne vois toujours pas comment la nouvelle image une fois redimensionné est-elle sauvegardé sur le serveur !
Est-ce ImageCopyResampled qui s'occupe de cela ??
Compte supprimé
vlà une fonction que j'utilise (ne marche que pour des .jpg) :
$destFilename=url de l'image crée
$srcFilename=ulr de l'image d'origine
$maxWidth et $maxHeight = hauteur et largeur MAX de l'image redimensionnée

CODE
function resizepicture($destFilename , $srcFilename , $maxWidth , $maxHeight)
{
// recupere la taille originale
$infos = getimagesize($srcFilename);

// calcule le ratio de redimensionnement
$ratio_w = $infos[0] / $maxWidth;
$ratio_h = $infos[1] / $maxHeight;
$ratio = ($ratio_w > $ratio_h)?$ratio_w:$ratio_h;

// définit largeur et hauteur pour la nouvelle image
$newWidth = $infos[0] / $ratio;
$newHeight = $infos[1] / $ratio;

// crée l'image de destination
$outBuffer = imagecreatetruecolor($newWidth, $newHeight);
$inBuffer = imageCreateFromJPEG($srcFilename);
imagecopyresampled($outBuffer,$inBuffer,0,0,0,0,$newWidth,$newHeight,$infos[0],$infos[1]);

// ecrit l'image crée avec une copression JPG de 90
imageJPEG($outBuffer,$destFilename,90);
}


Voilà...
Gamesvideo
ok merci je vais essayer avec ton script

Merci de ton aide
sgaiotti
bonjour

Voici un code sympathique qui pourait t'aider
CODE
  1. <?
  2. // -----------------------------------------------------------------------
  3. // Fonction de redimensionnement d'image
  4. // -----------------------------------------------------------------------
  5. function Resize($source, $destination, $width, $height, $stretch, $quality) {
  6. // 1 - Gestion des erreurs
  7. if (!file_exists($source)) return "Error : File not exist !";
  8. if (!function_exists("ImageCreateFromJpeg")) return "Error : Librairie GD non instalée !";
  9. // 2 - Lecture de l'image
 10. $src_img=imagecreatefromjpeg($source);
 11. if (!$src_img) return "Erreur : Lecture impossible de l'image ".$source." !";
 12. $w = imagesx($src_img);
 13. $h = imagesy($src_img);
 14. // 3 - Redimensionnement en largeur
 15. if (!$stretch) {
 16.     if ((($h * $width) / $w) > $height) {
 17.         $im_w = ($w * $height) / $h;
 18.         $im_h = $height;
 19.     } else {
 20.         $im_w = $width;
 21.         $im_h = ($h * $width) / $w;
 22.     }
 23. } else {
 24.     $im_w = $width;
 25.     $im_h = $height;
 26. }
 27. $x = ($width-$im_w)/2;
 28. $y = ($height-$im_h)/2;
 29. // 4 - Création d'une image buffer
 30.     $dst_img = imagecreate($width, $height);
 31.     if (!$dst_img) return "Erreur : Buffer non créé : ".$dst_img;
 32.     $bgc = imagecolorallocate($dst_img, 255, 255, 255);
 33.     imagefilledrectangle($dst_img, 0, 0, $width, $height, $bgc);
 34.     imagecopyresized($dst_img,$src_img,$x,$y,0,0,$im_w,$im_h,$w,$h);
 35. // 5 - Enregistrement du fichier
 36.     imagejpeg($dst_img,$destination,$quality);
 37. }
 38. ?>


Explication de la fonction Resize($source, $destination, $width, $height, $stretch, $quality)

- source : l'image que tu veux redimensionner
-destination : l'image résultante
- width : la largeur de l'image résultante
- height : la hauteur de l'image résultante
- stretch : true/false : Si tu veux étirer ton image ou bien la redimentionner proportionnellement
- quality : la qualitée de l'image résultante ( un chiffre de 0 à 100)

Plus le chiffre est important, meilleur sera la qualité mais attention, grande qualité = grosse image

Apres, tu peux utilisé un tableau de façon a renseigner les tailles d'écran

Exemple, pour un telephone A, taille = 128 * 128
Pour un téléphone B, Taille = 64*64

Tu crées un tableau ( Tel,Width,Height,Stretch)
CODE
TAB[0] = (A,128,128,False)
TAB[1] = (B,128,64,Yes)    (le yes précise que les proportion ne sont par respetées


Ensuite, pour un téléphone B, tu utilise la fonction comme suit
CODE
Resize($source, $destination, TAB[1,1], TAB[1,3], TAB[1,3], 50)


Bon courage
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.