Classe : générateur de miniature stricte optimisé

Description

Bonjour,

Une classe qui permet de générer une miniature (à partir d'un formulaire d'envoi) avec des dimensions strictes sans déformer l'image, et en découpant le minimum possible.

Elle (la classe) va essayer de comprendre ce qu'il y a en trop pour pouvoir prendre les dimensions voulues, et tenter de découper un minimum de chaque coté. (que ce soit en hauteur ou largeur).

Vous avez accès à ces paramètres :

Changer la hauteur de la miniature, Changer la largeur, Changer le chemin.

La classe propose aussi :

De générer un nom unique à la miniature (si cette fonction n'est pas appelée elle prendra le même nom que l'originale, si elle existe déjà dans le dossier de destination elle prendra le nom suivi d'un chiffre (0, +1... +n).

Dans la source à télécharger, vous avez aussi un fichier d'exemple comment utiliser la classe.

Source / Exemple :


<?php

/*

  • CGemini - Générateur de miniature - Thumbnail generator
  • @author : François Bouly
  • @date : 10/01/09
  • @Utilisation:
  • Démarrer l'instance :
  • $image = new CGemini($_FILES['string']); // Remplacer 'string' par le nom de l'input-file de votre formulaire.
  • Paramètres facultatifs :
  • $image->setLmaxi(int); (largeur de l'image);
  • $image->setHmaxi(int); (hauteur de l'image);
  • $image->setIPath('string/'); (dossier de l'image suivi de /)
  • $image->geneName(); (va générer un nom de fichier unique, sinon il utilise le nom du fichier tel qu'envoyé);
  • Génération de la miniature :
  • $image->geneMini();
  • Amusez-vous bien !
  • /
class CGemini { // Données membre private $image = array(); private $itemp; private $lfile; private $hfile; private $tfile; // Données paramètres private $lmaxi = '100'; private $hmaxi = '100'; private $ipath = 'images/'; private $iname = 'defaut'; // Données objet private $lrati; private $hrati; // Modifieurs public function setLmaxi($var) {$this->lmaxi = $var;} public function setHmaxi($var) {$this->hmaxi = $var;} public function setIpath($var) {$this->ipath = $var;} // Constructeur public function __construct($filevar) { if (getimagesize($filevar['tmp_name']) != false) { $infos = getimagesize($filevar['tmp_name']); switch($infos[2]) { case 1: $this->tfile = 'gif'; $this->image = imagecreatefromgif($filevar['tmp_name']); break; case 2: $this->tfile = 'jpg'; $this->image = imagecreatefromjpeg($filevar['tmp_name']); break; case 3: $this->tfile = 'png'; $this->image = imagecreatefrompng($filevar['tmp_name']); break; default: unlink($this->itemp); exit('Ce type d\'image n\'est pas supporté.'); } $this->itemp = $filevar['tmp_name']; $this->lfile = $infos[0]; $this->hfile = $infos[1]; $this->iname = $filevar['name']; } } // Méthodes principales public function geneMini() { // Calcul $lratio = $this->lfile/$this->lmaxi; $hratio = $this->hfile/$this->hmaxi; $fratio = min($lratio,$hratio); $lratio = $this->lfile/$fratio; $hratio = $this->hfile/$fratio; $l = $this->lmaxi - $lratio; $h = $this->hmaxi - $hratio; $border = max($l,$h); $srcX = 0; $srcY = 0; if ($border == $l && $border != 0) $srcX = $border/2; if ($border == $h && $border != 0) $srcY = $border/2; // Modification de l'image $tempim = imagecreatetruecolor($this->lmaxi,$this->hmaxi); imagecopyresampled($tempim, $this->image, 0, 0, $srcX, $srcY, $lratio, $hratio, $this->lfile, $this->hfile); $this->image = $tempim; // Verification de la disponibilité du nom $fonly = substr($this->iname, 0, -4); for ($i=0; file_exists($this->ipath . $this->iname); $i++) { $this->iname = $fonly; $this->iname .= $i .'.'; $this->iname .= $this->tfile; } // Copie de l'image switch ($this->tfile) { case 'gif': imagegif($this->image,$this->ipath .'/'. $this->iname); break; case 'jpg': imagejpeg($this->image,$this->ipath .'/'. $this->iname); break; case 'png': imagepng($this->image,$this->ipath .'/'. $this->iname); break; } unlink($this->itemp); return $this->iname; } public function geneName() { $uniqid = uniqid(rand(), true); $this->iname = $uniqid .'.'. $this->tfile; } } ?>

Conclusion :


N'hésitez pas à laisser un commentaire pour proposer une feature manquante.

Amusez-vous bien !

Codes Sources

A voir également

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.

Du même auteur (GauldoMagique)