PHP Cration et manipulation dimages Jrme CUTRONA jerome

  • Slides: 20
Download presentation
PHP Création et manipulation d'images Jérôme CUTRONA jerome. cutrona@univ-reims. fr 19: 31: 47 Programmation

PHP Création et manipulation d'images Jérôme CUTRONA jerome. cutrona@univ-reims. fr 19: 31: 47 Programmation Web 2019 -2020 1

Préambule § GD : GIF Draw et maintenant Graphics Draw § L'utilisation habituelle de

Préambule § GD : GIF Draw et maintenant Graphics Draw § L'utilisation habituelle de PHP consiste à produire des pages HTML. § Grâce à la bibliothèque GD, 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 n CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart ) n Graphiques n Traitements par lots n 19: 31: 49 Programmation Web 2019 -2020 2

Algorithme général de création § Création d'une image : n n nouvelle à partir

Algorithme général de création § Création d'une image : n n nouvelle à partir d'un fichier § Manipulations de l'image n n n dessin texte … § Production de l'image finale : n n dans un fichier envoi vers le navigateur § Libération mémoire 19: 31: 50 Programmation Web 2019 -2020 3

Algorithme général de création <? php // Création $im = image. Create. True. Color(100,

Algorithme général de création <? php // Création $im = image. Create. True. Color(100, 100); // Manipulations $red = image. Color. Allocate($im, 255, 0, 0); image. Filled. Rectangle($im, 0, 0, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); image. PNG($im); // Libération mémoire image. Destroy($im); 19: 31: 51 Programmation Web 2019 -2020 4

Création d'une image (vide) image. Create( int $width, int $height ): resource construit une

Création d'une image (vide) image. Create( int $width, int $height ): resource construit une image vide de largeur $width et de hauteur $height et retourne son identifiant. L'image est à couleurs indexées. Retourne false en cas d'échec. image. Create. True. Color( int $width, int $height ): resource construit une image vide de largeur $width et de hauteur $height et retourne son identifiant. L'image est à couleurs "réelles" (24 bits). Retourne false en cas d'échec. image. Destroy( resource $image ): bool libère la mémoire associée à $image 19: 31: 51 Programmation Web 2019 -2020 5

Création d'une image (fichier) image. Create. From. GIF( string $nom ): resource construit une

Création d'une image (fichier) image. Create. From. GIF( string $nom ): resource construit une image à partir du fichier GIF nom image. Create. From. JPEG( string $nom ): resource construit une image à partir du fichier JPEG nom image. Create. From. PNG( string $nom ): resource construit une image à partir du fichier PNG nom image. Create. From. GD[2]( string $nom ): resource construit une image à partir du fichier GD[2] $nom 19: 31: 52 Programmation Web 2019 -2020 6

Production d'une image. GIF(resource $image [, string $fname]): bool construit un fichier GIF $fname

Production d'une image. GIF(resource $image [, string $fname]): bool construit un fichier GIF $fname à partir de $image. JPEG(resource $image [, string $fname]): bool construit un fichier JPEG $fname à partir de $image. PNG(resource $image [, string $fname]): bool construit un fichier PNG $fname à partir de $image. GD[2](resource $image [, string $fname]): bool construit un fichier GD[2] $fname à partir de $image Si $fname est absent, le contenu est transmis 19: 31: 55 Programmation Web 2019 -2020 7

Allocation de couleurs image. Color. Allocate( resource $image, int $red, int $green, int $blue

Allocation de couleurs image. Color. Allocate( resource $image, int $red, int $green, int $blue ): int construit une couleur ($red, $green, $blue) pour l'image $image et retourne son identifiant. 0 ≤ $red ≤ 255 0 ≤ $green ≤ 255 0 ≤ $blue ≤ 255 19: 31: 56 Programmation Web 2019 -2020 8

Allocation de couleurs image. Color. Allocate. Alpha( resource $image, int $red, int $green, int

Allocation de couleurs image. Color. Allocate. Alpha( resource $image, int $red, int $green, int $blue, int $alpha ): int construit une couleur ($red, $green, $blue, $alpha) pour l'image $image et retourne son identifiant. 0 ≤ $red ≤ 255 0 ≤ $green ≤ 255 0 ≤ $blue ≤ 255 0 ≤ $alpha ≤ 127 (transparence de la couleur) 19: 31: 57 Programmation Web 2019 -2020 9

Copie redimensionnée d'images image. Copy. Resized( resource $dst_im, resource $src_im, int $dst_x, int $dst_y,

Copie redimensionnée d'images image. Copy. Resized( resource $dst_im, resource $src_im, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_w, int $dst_h, int $src_w, int $src_h ): bool 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. image. Copy. Resampled( … ): bool remplace l'approximation par un ré-échantillonnage 19: 32: 00 Programmation Web 2019 -2020 10

Dessiner dans une image § image. Color. Allocate( resource $image, int $red, int $green,

Dessiner dans une image § image. Color. Allocate( resource $image, int $red, int $green, int $blue ): int § image. Arc( resource $image, int $cx, int $cy, int $width, int $height, int $start, int $end, int $color ): bool § image. Line( resource $image, int $x 1, int $y 1, int $x 2, int $y 2, int $color ): bool § image. String( resource $image, int $font, int $x, int $y, string $s, int $color ): bool 19: 32: 04 Programmation Web 2019 -2020 11

Création d'images à la volée <img src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20415%20289%22%3E%3C/svg%3E' data-src="img. php" alt="Mon image" height="152" width="210"> Peut dépendre

Création d'images à la volée <img src="img. php" alt="Mon image" height="152" width="210"> Peut dépendre de paramètres GET (ou POST) : • img. php? t=Coucou • img. php? r=10&v=120&b=255 • img. php? i=im. jpg • … <? php // Création $im = image. Create(100, 100); // Manipulations $red = image. Color. Allocate($im, 255, 0, 0); image. Filled. Rectangle($im, 0, 0, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); image. PNG($im); // Libération mémoire image. Destroy($im); 19: 32: 06 Programmation Web 2019 -2020 12

Introduction d’une vision objet ? § image. Create. True. Color( int $width, int $height

Introduction d’une vision objet ? § image. Create. True. Color( int $width, int $height ): resource § image. Color. Allocate( resource $image, … § image. Arc( resource $image, … § image. Line( resource $image, … § image. String( resource $image, … § image. Destroy( resource $image ) 19: 32: 07 Programmation Web 2019 -2020 13

Encapsulation objet class GDImage { // @var resource $_resource image identifier private $resource =

Encapsulation objet class GDImage { // @var resource $_resource image identifier private $resource = null; private function __construct() { } public function __destruct() { if (!is_null($this->resource)) image. Destroy($this->resource); } 19: 32: 08 Programmation Web 2019 -2020 14

Encapsulation objet : usine public static function create. From. Size(int $x, int $y, bool

Encapsulation objet : usine public static function create. From. Size(int $x, int $y, bool $truecolor=true): self { $resource = false; if ($truecolor) $resource = @image. Create. True. Color($x, $y); else $resource = @image. Create($x, $y); if ($resource !== false) { $image = new self(); $image->resource = $resource; return $image; } else throw new Logic. Exception("Failed to create GD resource"); } 19: 32: 09 Programmation Web 2019 -2020 15

Encapsulation objet : usine public static function create. From. File(string $filename, string $filetype): self

Encapsulation objet : usine public static function create. From. File(string $filename, string $filetype): self { if (is_file($filename)) { if (in_array($filetype, self: : $factory_types)) { $function. Name = 'image. Create. From'. $filetype; $image = new self(); if (($tmp = @$function. Name($filename)) === false) { throw new Exception("unable to load file '{$filename}'"); } $image->resource = $tmp; return $image; } else throw new Exception("unknown filetype"); } else throw new Exception("{$filename} : no such file"); } 19: 32: 11 Programmation Web 2019 -2020 16

Encapsulation objet : constantes /** * @var array */ private static $factory_types = [

Encapsulation objet : constantes /** * @var array */ private static $factory_types = [ self: : GD, self: : GD 2 PART, self: : GD 2, self: : GIF, self: : JPEG, self: : PNG, self: : WBMP, self: : XBM, self: : XPM, ] ; 19: 32: 12 Programmation Web 2019 -2020 17

Encapsulation objet : usine class GDImage { const GD = 'gd' ; const GD

Encapsulation objet : usine class GDImage { const GD = 'gd' ; const GD 2 PART = 'gd 2 part' ; const GD 2 = 'gd 2' ; const GIF = 'gif' ; const JPEG = 'jpeg' ; const PNG = 'png' ; const WBMP = 'wbmp' ; const XBM = 'xbm' ; const XPM = 'xpm' ; 19: 32: 17 Programmation Web 2019 -2020 18

Création d'images : vision objet <img src='data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20415%20289%22%3E%3C/svg%3E' data-src="img. php" alt="Mon image" height="152" width="210"> Peut dépendre

Création d'images : vision objet <img src="img. php" alt="Mon image" height="152" width="210"> Peut dépendre de paramètres GET (ou POST) : • img. php? t=Coucou • img. php? r=10&v=120&b=255 • img. php? i=im. jpg • … 19: 32: 19 <? php require_once('GDImage. class. php'); // Création $im = GDImage: : create. From. Size(100, 100); // Manipulations $red = $im->color. Allocate(255, 0, 0); $im->filled. Rectangle(0, 0, 99, $red); // Envoi vers le navigateur header('Content-type: image/png'); $im->PNG(); // Libération mémoire automatique Programmation Web 2019 -2020 19

Comparaison non objet / objet <? php // Création $im = image. Create(100, 100);

Comparaison non objet / objet <? php // Création $im = image. Create(100, 100); // Manipulations $red = image. Color. Allocate($im, 255, 0, 0); image. Filled. Rectangle($im, 0, 0, 99, $red); // Envoi vers le navigateur header('Content-Type: image/png'); image. PNG($im); // Libération mémoire image. Destroy($im); 19: 32: 22 <? php require_once('gdimage. class. php'); // Création $im = GDImage: : create. From. Size(100, 100); // Manipulations $red = $im->color. Allocate(255, 0, 0); $im->filled. Rectangle(0, 0, 99, $red); // Envoi vers le navigateur header('Content-type: image/png'); $im->PNG(); // Libération mémoire automatique Programmation Web 2019 -2020 20