Fonction de miniaturisation d'image jpeg gif png

Soyez le premier à donner votre avis sur cette source.

Vue 11 388 fois - Téléchargée 4 865 fois

Description

Si jamais vous avez besoin de créer des miniatures, par exemple pour un espace membre pour mettre des avatars (pas besoin de conserver sur la photo à 2Mo!), une galerie photo voila une fonction qui permet de générer des miniatures a partir de gif, jpeg, png.

Ce code n'est plus maintenu.

Cédric Strubel

Source / Exemple :


<?php
       /*utilisation de la fonction :
       $path=chemin d'accès au dossier contenant la photo
       $fichierSource=nom de la photo
       $grand=taille du plus grand coté (hauteur pour les portraits, largeur pour les paysages)
       $destination=dossier de destination de la photo, par rapport à l'emplacement de la fonction */
       
       
       function thumb($path,$fichierSource,$grand,$destination){
              
              $ombre=$grand / 20;
              
              //teste le format de l'image et crée l'image concerné
              
              $image_size=getimagesize($path.$fichierSource );
              
              switch ( $image_size[2] ) {
                     
                     case 1 :
                     $source = ImageCreateFromGif($path.$fichierSource);
                     $mime_photo='image/gif';
                     break;
                     case 2 :
                     $source = ImageCreateFromJPEG($path.$fichierSource);
                     $mime_photo='image/jpeg';
                     break;            
                     case 3 :  
                     $source = ImageCreateFromPNG($path.$fichierSource);
                     $mime_photo='image/png';
                     break;        
                     default:
                     echo '<br />Erreur de format image <strong>'.$fichierSource.'</strong>. Seuls les formats jpeg, gif et png sont supportés';
                     return false;
                     
              }
              
              $largeurSource = imagesx($source);
              $hauteurSource = imagesy($source);
              
              
              //calcul le rapport entre largeur et longueur...
              $rapport_dim= $largeurSource / $hauteurSource;
              
              
              //test si image en portrait ou en paysage
              if ( $largeurSource >= $hauteurSource ) {
                     $largeurDestination = $grand;
                     $hauteurDestination = $largeurDestination / $rapport_dim;
              }
              else {
                     $hauteurDestination = $grand;
                     $largeurDestination = $hauteurDestination * $rapport_dim;
              }
              
              
              //crée l'image ( taille de l'imange source + taille de l'ombre)         
              $im = ImageCreateTrueColor ($largeurDestination + $ombre, $hauteurDestination + $ombre)
              or die ('<br />Erreur lors de la création image <strong>'.$fichierSource.'</strong>');
              
              
              //rempli le fond de blanc         
              $blanc=ImageColorAllocate ($im, 255, 255, 255);
              ImageFill($im, 0, 0, $blanc);  
              ImageColorTransparent ($im, $blanc);
              
              
              
              //crée l'ombre           
              $col = ImageColorAllocate ($im, 130 ,130 ,130 );        
              
              ImageFilledRectangle ($im, $ombre, $ombre, $largeurDestination + $ombre, $hauteurDestination + $ombre, $col);
              

              //ajoute par dessus l'image source miniaturisée
              ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);

              $noir=ImageColorAllocate ($im, 0, 0, 0);

              ImageRectangle($im,0,0, $largeurDestination, $hauteurDestination, $noir);

              //crée la miniature
              switch ( $mime_photo) {
                     
                     case 'image/jpeg' :

                     ImageJpeg ($im, $destination.'/'.$fichierSource);
                     break;
                     
                     case 'image/gif' :
                     
                     ImageGif ($im, $destination.'/'.$fichierSource);
                     break;
                     
                     case 'image/png' :
                     
                     ImagePng ($im, $destination.'/'.$fichierSource);
                     break;     
                     
                     
              }
              
              return true;
       }
       
       
       $file='img.jpeg';
       
       
       
       if(!is_file('./thumb/'.$file)) {
              
              thumb('./',$file,100,'./thumb/') or die ('<br />La miniaturisation de <strong>'.$file.'</strong> a échoué...');
              echo '<img src="./thumb/',$file,'" />';
              
       }
       
?>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
321
Date d'inscription
samedi 12 février 2005
Statut
Membre
Dernière intervention
21 février 2013

bon bah moi je n'y comprends plus rien si je mets le script tel quel en declarant les variables au debut ca ne fonctionne pas mais si je mets directement les valeurs a la place du nom des variables dans le script ca fonctionne, j'ai reussi a m'arrangé a peu pres sauf pour un truc qui me saoule :

$path = './images/';
$fichierSource = '028.jpg';
$image = $path.$fichierSource;

(...)

$image_size=getimagesize($image);

switch ( $image_size[2] ) {

case 1 :
$source = ImageCreateFromGif($image);
$mime_photo='image/gif';
break;
(...)


ca ne fonctionne pas mais si je fais :


$image_size=getimagesize('./images/028.jpg');

switch ( $image_size[2] ) {

case 1 :
$source = ImageCreateFromGif('./images/028.jpg');
$mime_photo='image/gif';
break;


là ca fonctionne !!!

peut-on m'expliquer où est le bug !

il ne reconnais pas le type-mime du fichier quand je mets le nom des variables pourtant la valeur est correct puisque
echo $image; m'affiche './images/028.jpg'


idem pour $grand je suis obligé de le remplacer par sa valeur sinon ca ne fonctionne pas.


par contre j'ai changé
$file='img.jpeg';
par
$file=$fichierSource;
c'est mieux d'avoir la miniature qui a le meme nom que l'original !

pour que la miniaturisation fonctionne correctement
j'ai egalement modifié
if ( $largeurSource >= $hauteurSource ) {
$largeurDestination = $grand;
$hauteurDestination = $largeurDestination / $rapport_dim;
}
else {
$hauteurDestination = $grand;
$largeurDestination = $hauteurDestination * $rapport_dim;
}


par

if ( $largeurSource >= $hauteurSource ) {
$largeurDestination = $grand;
$hauteurDestination = $grand / $rapport_dim;
}
else {
$hauteurDestination = $grand;
$largeurDestination = $grand * $rapport_dim;
}


voila si qqn trouve la reponse a mon probleme pour $path.$fichierSource
ca serait cool merki
Messages postés
12
Date d'inscription
samedi 31 mai 2003
Statut
Membre
Dernière intervention
27 août 2008

salut,
je crois que la fonction createimagefrom n'est pas au point, car j'ai fais un script qui miniaturise tout les jpeg dans un dossier et en testant la miniaturisation en local, la copie est de bonne qualité, mais sur un serveur, tel que free, il devient illisible.
Messages postés
17
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
30 août 2007

j'ai remarqué que l'image qui a été traiter par le code est de beaucoup plus faible qualité malgré que j'utilise la valeur 100. ( il me semble que la quantité de couleur utilisé pour utilisé l'image redimensionnée soit inférieur ) est-ce que c'est normal? est que la fonction GD ne soit pas encore au point? à l'aide! merci.
Messages postés
67
Date d'inscription
mercredi 2 juillet 2003
Statut
Membre
Dernière intervention
1 septembre 2008

Tout vient de là -> open_basedir restriction in effect.
Ton dossier /photo/ existe pas, car il essaye de le detecter a la racine.

Essaye de mettre ./photo/, qui va chercher dans le dossier courant:)
Messages postés
17
Date d'inscription
mercredi 19 octobre 2005
Statut
Membre
Dernière intervention
30 août 2007

Je ne suis pas un pro mais je cherche a reglé ce bug que j'ai de mon coté... qu'est-ce qui cloche?

Warning: getimagesize(): open_basedir restriction in effect. File(/photo/general.jpg) is not within the allowed path(s): (/home/euhreux/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/euhreux/public_html/upload/upload.php on line 32

Warning: getimagesize(/photo/general.jpg): failed to open stream: Operation not permitted in /home/euhreux/public_html/upload/upload.php on line 32

Erreur de format image general.jpg. Seuls les formats jpeg, gif et png sont supportés
Warning: getimagesize(./img.jpeg): failed to open stream: No such file or directory in /home/euhreux/public_html/upload/upload.php on line 32

Erreur de format image img.jpeg. Seuls les formats jpeg, gif et png sont supportés
La miniaturisation de img.jpeg a échoué...
Afficher les 39 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.