200 likes | 350 Views
PHP Création et manipulation d'images. Jérôme CUTRONA jerome.cutrona@univ-reims.fr. Préambule. L'utilisation habituelle de PHP consiste à produire des pages HTML.
E N D
PHPCréation et manipulation d'images Jérôme CUTRONA jerome.cutrona@univ-reims.fr Programmation Web 2011-2012
Préambule • L'utilisation habituelle de PHP consiste à produire des pages HTML. • Grâce à la bibliothèqueGD, PHP peut produire des images enregistrées sur disque ou directement transmises au navigateur du client. • Formats d'images accessibles sont GIF, JPEG et PNG • Possibilités offertes par la création/manipulation d'images en PHP : • redimensionnement à la volée • CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) • insertion de texte dynamique Programmation Web 2011-2012
Algorithme général de création • Création d'une image : • nouvelle • à partir d'un fichier • Manipulations de l'image • dessin • texte • … • Production de l'image finale : • dans un fichier • envoi vers le navigateur • Libération mémoire Programmation Web 2011-2012
Algorithme général de création <?php // Création $im=imageCreateTrueColor(100, 100); // Manipulations $red=imageColorAllocate($im, 255, 0, 0); imageFilledRectangle($im, 0, 0, 99, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); imagePNG($im); // Libération mémoire imageDestroy($im); Programmation Web 2011-2012
Création d'une image (vide) resourceimageCreate ( intwidth, intheight ) construit une image vide de largeur width et de hauteur heightet retourne son identifiant.L'image est à couleurs indexées.Retourne false en cas d'échec. resourceimageCreateTrueColor ( intwidth, intheight ) construit une image vide de largeur width et de hauteur heightet retourne son identifiant.L'image est à couleurs "réelles" (24bits).Retourne false en cas d'échec. boolimageDestroy ( resourceimage ) libère la mémoire associée à image Programmation Web 2011-2012
Création d'une image (fichier) resourceimageCreateFromGIF ( string nom ) construit une image à partir du fichier GIF nom resourceimageCreateFromJPEG ( string nom ) construit une image à partir du fichier JPEG nom resourceimageCreateFromPNG ( string nom ) construit une image à partir du fichier PNG nom resourceimageCreateFromGD[2] ( string nom ) construit une image à partir du fichier GD[2] nom Programmation Web 2011-2012
Production d'une image boolimageGIF (resourceimage [, string fname]) construit un fichier GIF fname à partir de image boolimageJPEG (resourceimage [, string fname]) construit un fichier JPEG fname à partir de image boolimagePNG (resourceimage [, string fname]) construit un fichier PNG fname à partir de image boolimageGD[2] (resourceimage [, string fname]) construit un fichier GD[2] fname à partir de image Si fname est absent, le contenu est transmis Programmation Web 2011-2012
Allocation de couleurs intimageColorAllocate ( resourceim, intR, intG, intB) construit une couleur (R, G, B) pour l'image imet retourne son identifiant. 0 ≤R≤ 2550 ≤G≤ 2550 ≤B≤ 255 Programmation Web 2011-2012
Allocation de couleurs intimageColorAllocateAlpha ( resource im, intR, intG, intB,intA) construit une couleur (R, G, B, A) pour l'image imet retourne son identifiant.0 ≤R≤ 2550 ≤G≤ 2550 ≤B≤ 2550 ≤A≤ 127 (transparence de la couleur) Programmation Web 2011-2012
Copie redimensionnée d'images boolimageCopyResized (resourcedst_im, resourcesrc_im,intdst_x,intdst_y, intsrc_x, intsrc_y,intdst_w, intdst_h, intsrc_w, intsrc_h) copie une portion rectangulaire de src_im dans une portion rectangulaire dst_im. Si les portions sont de taille différente, l'approximation se fait à l'échantillon le plus proche. boolimageCopyResampled ( … ) remplace l'approximation par un ré-échantillonnage Programmation Web 2011-2012
Dessiner dans une image • intimageColorAllocate ( resource image,intred, intgreen, intblue) • boolimageArc( resource image,intcx, intcy,intwidth, intheight,intstart, intend, intcolor) • boolimageLine ( resourceimage,intx1, inty1,intx2, inty2, intcolor) • boolimageString ( resource image, intfont,intx, inty, string s, intcolor) Programmation Web 2011-2012
Création d'images à la volée <imgsrc="img.php" alt="Mon image" height="152"width="210"> • Peut dépendre de paramètres GET : • img.php?t=Coucou • img.php?r=10&v=120&b=255 • img.php?i=im.jpg • … <?php // Création $im=imageCreate(100, 100); // Manipulations $red= imageColorAllocate($im, 255, 0, 0); imageFilledRectangle($im,0, 0, 99, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); imagePNG($im); // Libération mémoire imageDestroy($im); Programmation Web 2011-2012
Introduction d’une vision objet ? resource représente l’entité image manipulée Programmation Web 2011-2012 resourceimageCreateTrueColor ( intwidth, intheight ) intimageColorAllocate ( resource image, … boolimageArc( resource image, … boolimageLine ( resourceimage, … boolimageString ( resource image, … boolimageDestroy ( resourceimage )
Encapsulation objet Programmation Web 2011-2012 class GDImage{ // @var resource $_resource image identifier private$_resource= null ; privatefunction__construct() { } public function__destruct() { if (!is_null($this->_resource)) imageDestroy($this->_resource) ; }
Encapsulation objet : usine Programmation Web 2011-2012 public static function createFromSize($x, $y, $truecolor=true) { $x = (int) $x ; $y = (int) $y ; $resource= false ; if ($truecolor) $resource= @imageCreateTrueColor($x, $y) ; else $resource= @imageCreate($x, $y) ; if ($resource!== false) { $image = new self() ; $image->_resource= $resource ; return $image ; } else throw new LogicException("Failed to create GD resource") ; }
Encapsulation objet : usine Programmation Web 2011-2012 public static function createFromFile($filename, $filetype) { if (is_file($filename)) { if (in_array($filetype, self::$_factory_types)) { $functionName= 'imageCreateFrom' . $filetype ; $image = new self() ; if (($tmp= @$functionName($filename)) === false) { throw new Exception("unable to load file '{$filename}'") ; } $image->_resource= $tmp ; return $image ; } elsethrow new Exception("unknown filetype") ; } elsethrow new Exception("{$filename} : no such file") ; }
Encapsulation objet : constantes Programmation Web 2011-2012 /** * @var array */ privatestatic$_factory_types=array( self::GD, self::GD2PART, self::GD2, self::GIF, self::JPEG, self::PNG, self::WBMP, self::XBM, self::XPM, ) ;
Encapsulation objet : usine Programmation Web 2011-2012 class GDImage{ const GD = 'gd' ; const GD2PART = 'gd2part' ; const GD2 = 'gd2' ; const GIF = 'gif' ; const JPEG = 'jpeg' ; const PNG = 'png' ; const WBMP = 'wbmp' ; const XBM = 'xbm' ; const XPM = 'xpm' ;
Création d'images : vision objet <imgsrc="img.php" alt="Mon image" height="152"width="210"> <?php require_once('gdimage.class.php') ; // Création $im =GDImage::createFromSize(100, 100) ; // Manipulations $red=$im->colorAllocate(255, 0, 0) ; $im->filledRectangle(0, 0, 99, 99, $red) ; // Envoi vers le navigateur header('Content-type: image/png') ; $im->PNG() ; // Libération mémoire // Automatique, à la destruction de $im • Peut dépendre de paramètres GET : • img.php?t=Coucou • img.php?r=10&v=120&b=255 • img.php?i=im.jpg • … Programmation Web 2011-2012
Comparaison non objet / objet <?php // Création $im=imageCreate(100, 100); // Manipulations $red= imageColorAllocate($im, 255, 0, 0); imageFilledRectangle($im,0, 0, 99, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); imagePNG($im); // Libération mémoire imageDestroy($im); <?php require_once('gdimage.class.php') ; // Création $im =GDImage::createFromSize(100, 100) ; // Manipulations $red=$im->colorAllocate(255, 0, 0) ; $im->filledRectangle(0, 0, 99, 99, $red) ; // Envoi vers le navigateur header('Content-type: image/png') ; $im->PNG() ; // Libération mémoire // Automatique, à la destruction de $im Programmation Web 2011-2012