[script] Création de vignette jpeg ou png

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

[script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 0:43

Je vous laisse un petit script que je me suis adapté pour mes besoins personnel.

Il permet de créer une vignette à partir d'une image originale.
La vignette est enregistré sur le serveur et ne peut être supérieure à la taille de l'original.

Le script prend en compte les images png et jpeg (le gif n'étant plus dans le domaine libre).

Vous me direz ainsi si je peux l'optimiser un peu

Code: Tout sélectionner
/**********************************************************************
- vignette($file, $maxWidth = 450, $maxHeight = 350)
- Création d'une vignette à partir d'une image ($file)
- Les extension prise en compte sont jpg et png (le gif est remplacé par le png ; le gif animé n'est jamais redimensionné)
- Dernière version : 27/11/2006

* $file : chemin vers le fichier image à redimensionner
* $maxWidth : largeur maximum que dois faire la miniature (450 par défaut)
* $maxHeight : Hauteur maximum que dois faire l'image (350 par défaut)
**********************************************************************/
function vignette($file, $maxWidth = 450, $maxHeight = 350){
   
   // Vérification des erreurs dans les paramètres de la fonction
   //============================================================
   if(!file_exists($file)){
      // Si le fichier passé en paramètre n'existe pas
      return 'Le fichier '.$file.' n\'a pas été trouvé sur le serveur.';
   }
   elseif(empty($file)){
      // Si le fichier n'a pas été indiqué
      return 'Nom du fichier non renseigné.';
   }
   elseif(!is_numeric($maxWidth) || empty($maxWidth) || $maxWidth < 0){
      // Si la largeur max est incorrecte (n'est pas numérique, est vide, ou est inférieure à 0)
      return 'Valeur de la largeur incorrecte.';
   }
   elseif(!is_numeric($maxHeight) || empty($maxHeight) || $maxHeight < 0){
      // Si la hauteur max est incorrecte (n'est pas numérique, est vide, ou est inférieure à 0)
      return 'Valeur de la hauteur incorrecte.';
   }
   //============================================================
   
   $fichier = realpath($file); // Chemin canonique absolu de l'image
   $dir = dirname($file).'/'; // Chemin du dossier contenant l'image
   $infoImg = getimagesize($fichier); // Récupération des infos de l'image
   $imgWidth = $infoImg[0]; // Largeur de l'image
   $imgHeight = $infoImg[1]; // Hauteur de l'image
   
   // Initialisation des variables selon l'extension de l'image
   switch($infoImg[2]){
      case 2:
         $img = imagecreatefromjpeg($fichier); // Création d'une nouvelle image jpeg à partir du fichier
         $extImg = '.jpg'; // Extension de l'image
      break;
      case 3:
         $img = imagecreatefrompng($fichier); // Création d'une nouvelle image png à partir du fichier
         $extImg = '.png';
   }
   
   // Initialisation des dimensions de la vignette si elles sont supérieures à l'original
   if($maxWidth > $imgWidth){ $maxWidth = $imgWidth; }
   if($maxHeight > $imgHeight){ $maxHeight = $imgHeight; }
   
   $whFact = $maxWidth/$maxHeight; // Facteur largeur/hauteur des dimensions max de la vignette
   $imgWhFact = $imgWidth/$imgHeight; // Facteur largeur/hauteur de l'original
   
   // Fixe les dimensions de la vignette
   if($whFact < $imgWhFact){
      // Si largeur déterminante
      $thumbWidth  = $maxWidth;
      $thumbHeight = $thumbWidth / $imgWhFact;
   } else {
      // Si hauteur déterminante
      $thumbHeight = $maxHeight;
      $thumbWidth  = $thumbHeight * $imgWhFact;
   }
   
   $imgThumb = imagecreatetruecolor($thumbWidth, $thumbHeight); // Création de la vignette
   
   imagecopyresized($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight); // Insère l'image de base redimensionnée
   
   $fileName = basename($file, $extImg); // Nom du fichier sans son extension
   $imgThumbName = $dir.$fileName.'-min'.$extImg; // Chemin complet du fichier de la vignette
   
   //Création du fichier de la vignette
   $fp = fopen($imgThumbName, "w");
   fclose($fp);
   
   // Renvoi la vignette créée
   switch($infoImg[2]){
      case 2:
         imagejpeg($imgThumb, $imgThumbName, 50); // Renvoi d'une image jpeg avec une qualité de 50
         break;
      case 3:
         imagepng($imgThumb, $imgThumbName);
   }
   
   return $imgThumbName;

}
:wink:


e-kiwi
Modérateur
Modérateur
 
Messages: 13854
Inscription: Mar Déc 23, 2003 9:04

Message le Mar Nov 28, 2006 8:17

Bonjour,

si vous etes intérréssé, j'ai le script qui genere une image copyrighté (il suffit de donner le chemin du logo et sa position dans l'image finale)


apiphoto
WRInaute impliqué
WRInaute impliqué
 
Messages: 411
Inscription: Sam Avr 29, 2006 13:31

Message le Mar Nov 28, 2006 9:08

e-kiwi a écrit:Bonjour,

si vous etes intérréssé, j'ai le script qui genere une image copyrighté (il suffit de donner le chemin du logo et sa position dans l'image finale)


Bonjour,
Oui c'est un script qui m'intéresse.
Pour l'instant je travail en amont avec Photoshop mais j'ai un site en préparation pour lequel cela me serait très utile.
Merci

Et je testerai le script précédent aussi.
Merci


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 9:18

medium69 a écrit:Le script prend en compte les images png et jpeg (le gif n'étant plus dans le domaine libre).



http://gnu.fyxm.net/philosophy/gif.fr.html#venuenote

Le brevet Unisys a expiré le 20 juin 2003 aux États-Unis; en Europe, le 18 juin 2004; au Japon, le 20 juin 2004 et au Canada, le 7 juillet 2004. Le brevet américain de IBM a expiré le 11 août 2006. Le Software Freedom Law Center dit qu'après le 1er octobre 2006, il n'y aura plus de revendication de brevet significative pour interférer avec l'emploi du format GIF.


.. et imagecreatefromgif marche très bien :roll:


rog
WRInaute accro
WRInaute accro
 
Messages: 1662
Inscription: Jeu Sep 21, 2006 2:32

Message le Mar Nov 28, 2006 10:43

yep

moi j'en ai fait un qui met à jour un dossier mirroir

tu lances le script et il update le dossier à l'identique et en passant efface les vignettes dont les images ont disparues

je le publierai quand j'aurai fini mon site et surtout quand ovh voudra bien me livrer le dedié que j'ai commandé et payé depuis plus de deux mois

rog


Tilt
WRInaute passionné
WRInaute passionné
 
Messages: 818
Inscription: Sam Mar 26, 2005 11:48

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 12:31

medium69 a écrit:Vous me direz ainsi si je peux l'optimiser un peu

Oui, c'est le script de la doc php, à ceci près que la doc conseille de remplacer imagecopyresized par imagecreatetruecolor (http://www.php.net/imagecopyresized).


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3577
Inscription: Mar Fév 10, 2004 16:40

Message le Mar Nov 28, 2006 12:34

Le brevet du GIF est tombé dans le domaine public depuis quelques temps déjà.


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:07

Tilt a écrit:
medium69 a écrit:Vous me direz ainsi si je peux l'optimiser un peu

Oui, c'est le script de la doc php, à ceci près que la doc conseille de remplacer imagecopyresized par imagecreatetruecolor (http://www.php.net/imagecopyresized).


hum nan. imagecopyresized est remplacé par imagecopyresampled

:wink:


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:13

La Chaise sauvage a écrit:
medium69 a écrit:Le script prend en compte les images png et jpeg (le gif n'étant plus dans le domaine libre).



http://gnu.fyxm.net/philosophy/gif.fr.html#venuenote

Le brevet Unisys a expiré le 20 juin 2003 aux États-Unis; en Europe, le 18 juin 2004; au Japon, le 20 juin 2004 et au Canada, le 7 juillet 2004. Le brevet américain de IBM a expiré le 11 août 2006. Le Software Freedom Law Center dit qu'après le 1er octobre 2006, il n'y aura plus de revendication de brevet significative pour interférer avec l'emploi du format GIF.


.. et imagecreatefromgif marche très bien :roll:


Je n'ai jamais prétendu que imagecreatefromgif ne marchait pas.

:arrow: Je n'étais pas au courant du problème de revendication du brevet

:arrow: Cela dit, ont peut sans problème redimensionner un gif simple (il suffit d'ajouter cette partie dans le code) ainsi que tout les autres formats d'images (je me suis limité au plus courant sur le web)

:arrow: On ne peut cependant pas miniaturisé un gif animé avec cette méthode ; c'est ce qui à également motivé mon choix pour le remplacement du gif simple par png.


Je suis ouvert à une solution pour redimensionné à la demande un gif animé si quelqu'un à une solution


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

Message le Mar Nov 28, 2006 13:13

e-kiwi a écrit:Bonjour,

si vous etes intérréssé, j'ai le script qui genere une image copyrighté (il suffit de donner le chemin du logo et sa position dans l'image finale)


C'est une partie que je n'ai pas encore étudiée, mais qui m'intéresse.

Si tu peux nous donner le script :wink:


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:16

Tilt a écrit:
medium69 a écrit:Vous me direz ainsi si je peux l'optimiser un peu

Oui, c'est le script de la doc php, à ceci près que la doc conseille de remplacer imagecopyresized par imagecreatetruecolor (http://www.php.net/imagecopyresized).


Il est loin d'être identique il me semble :wink:


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:17

medium69 a écrit: :arrow: On ne peut cependant pas miniaturisé un gif animé avec cette méthode ; c'est ce qui à également motivé mon choix pour le remplacement du gif simple par png.


Je suis ouvert à une solution pour redimensionné à la demande un gif animé si quelqu'un à une solution


je suis en train de bosser sur la question justement... mais ce n'est pas vraiment montrable en l'état... à suivre


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:18

Je vois qu'il faudrait remplacer par imagecopyresized

:arrow: imagecopyresampled ou imagecreatetruecolor

quels sont les changements qui y sont bénéfiques ?


medium69
WRInaute accro
WRInaute accro
 
Messages: 2169
Inscription: Sam Mai 07, 2005 9:36

Re: [script] Création de vignette jpeg ou png

Message le Mar Nov 28, 2006 13:19

La Chaise sauvage a écrit:
medium69 a écrit: :arrow: On ne peut cependant pas miniaturisé un gif animé avec cette méthode ; c'est ce qui à également motivé mon choix pour le remplacement du gif simple par png.


Je suis ouvert à une solution pour redimensionné à la demande un gif animé si quelqu'un à une solution


je suis en train de bosser sur la question justement... mais ce n'est pas vraiment montrable en l'état... à suivre


Retiens mon pseusdo car si tu y arrives cela m'intéresse au plus au point :P


La Chaise sauvage
WRInaute passionné
WRInaute passionné
 
Messages: 691
Inscription: Lun Avr 11, 2005 10:37

Message le Mar Nov 28, 2006 13:22

check tes messages privés

[script] Création de vignette jpeg ou png

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités