Utilisation simple
Imagick rend la manipulation des images via PHP extrêmement facile grâce à une interface orientée objet. Voici un exemple rapide illustrant la création d'une miniature :
Exemple #1 Création d'une miniature avec Imagick
<?php
header('Content-type: image/jpeg');
$image = new Imagick('image.jpg');
// Si 0 est fourni comme paramètre de hauteur ou de largeur,
// les proportions seront conservées
$image->thumbnailImage(100, 0);
echo $image;
?>
En utilisant SPL ou tout autre fonctionnalité orientée objet supportée par Imagick, il devient simple de redimensionner tous les fichiers d'un dossier (utile pour des scripts batch redimensionnant des images issues d'un appareil photo numérique afin de les rendre lisibles sur le web). Voici un exemple de redimensionnement de toutes les images JPG d'un dossier, tout en conservant les métadonnées :
Exemple #2 Création de miniature de toutes les images JPG d'un dossier
<?php
$images = new Imagick(glob('images/*.JPG'));
foreach($images as $image) {
// On fournit 0 en guise de paramètre afin de conserver les proportions
$image->thumbnailImage(1024,0);
}
$images->writeImages();
?>
Voici un exemple permettant de créer le reflet d'une image. Ce reflet est créé en retournant l'image et en y ajoutant un dégradé. Ensuite, l'image original et son reflet sont ajoutés dans une nouvelle image.
Exemple #3 Création d'un reflet sur une image
<?php
/* Lecture de l'image */
$im = new Imagick("test.png");
/* Création d'une miniature de l'image */
$im->thumbnailImage(200, null);
/* Création d'une bordure */
$im->borderImage(new ImagickPixel("white"), 5, 5);
/* Clône l'image et on la retourne */
$reflection = $im->clone();
$reflection->flipImage();
/* Création du dégradé. Il sera ajouté à l'image retournée */
$gradient = new Imagick();
/* Le dégradé doit être assez large pour l'image et ses bordures */
$gradient->newPseudoImage($reflection->getImageWidth() + 10, $reflection->getImageHeight() + 10, "gradient:transparent-black");
/* Ajout du dégradé sur l'image retournée */
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
/* Ajout d'un peu d'opacité. Nécessite ImageMagick 6.2.9 ou supérieur */
$reflection->setImageOpacity( 0.3 );
/* Création d'une image vide */
$canvas = new Imagick();
/* L'image vide doit être assez large pour contenir les 2 images */
$width = $im->getImageWidth() + 40;
$height = ($im->getImageHeight() * 2) + 30;
$canvas->newImage($width, $height, new ImagickPixel("black"));
$canvas->setImageFormat("png");
/* Ajout de l'image originale et de l'image retournée dans notre nouvelle image */
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10);
/* Affichage de l'image */
header("Content-Type: image/png");
echo $canvas;
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
![Affichage de l'exemple : Création d'un reflet sur une image](https://www.gaudry.be/http://php.net/images/c0d23d2d6769e53e24a1b3136c064577-hello_world_reflection.png)
Voici un exemple montrant comment remplir un masque lors du dessin de l'image.
Exemple #4 Remplissage d'un texte avec un dégradé
<?php
/* Création d'un nouvel objet imagick */
$im = new Imagick();
/* Création d'une nouvelle image. Elle sera utilisée comme masque de remplissage */
$im->newPseudoImage(50, 50, "gradient:red-black");
/* Création d'un nouvel objet imagickdraw */
$draw = new ImagickDraw();
/* On commence un nouveau masque nommé "gradient" */
$draw->pushPattern('gradient', 0, 0, 50, 50);
/* Ajout du dégradé sur le masque */
$draw->composite(Imagick::COMPOSITE_OVER, 0, 0, 50, 50, $im);
/* Fermeture du masque */
$draw->popPattern();
/* Utilisation du masque nommé "gradient" comme remplissage */
$draw->setFillPatternURL('#gradient');
/* Définition de la taille du texte à 52 */
$draw->setFontSize(52);
/* Ajout d'un texte */
$draw->annotation(20, 50, "Bonjour le monde !");
/* Création d'un nouvel objet et d'une image blanche */
$canvas = new Imagick();
$canvas->newImage(350, 70, "white");
/* Dessine le ImagickDraw sur la nouvelle image */
$canvas->drawImage($draw);
/* Une bordure noire d'un pixel autour de l'image */
$canvas->borderImage('black', 1, 1);
/* Définition du format à PNG */
$canvas->setImageFormat('png');
/* Affiche l'image */
header("Content-Type: image/png");
echo $canvas;
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
![Affichage de l'exemple : Remplissage d'un texte avec un dégradé](https://www.gaudry.be/http://php.net/images/c0d23d2d6769e53e24a1b3136c064577-hello_world.png)
Exemple avec des images GIF animées
Exemple #5 Lit une image GIF et redimensionne toutes les frames
<?php
/* Crée un nouvel objet imagick et lit une image GIF */
$im = new Imagick("example.gif");
/* Redimensionne toutes les frames */
foreach ($im as $frame) {
/* 50x50 frames */
$frame->thumbnailImage(50, 50);
/* Définit le canevas virtuel à la bonne taille */
$frame->setImagePage(50, 50, 0, 0);
}
/* Notez l'utilisation de writeImages au lieu de writeImage */
$im->writeImages("example_small.gif", true);
?>
Exemple avec des ellipses primitives et des polices personalisées
Exemple #6 Create a PHP logo
<?php
/* Définit la largeur et la hauteur en proportion du logo PHP */
$width = 400;
$height = 210;
/* Crée un objet Imagick avec une toile transparent */
$img = new Imagick();
$img->newImage($width, $height, new ImagickPixel('transparent'));
/* Nouvelle instance ImagickDraw pour dessiner l'ellipse */
$draw = new ImagickDraw();
/* Définit la couleur violette pour remplir l'ellipse */
$draw->setFillColor('#777bb4');
/* Définit les dimensions de l'ellipse */
$draw->ellipse($width / 2, $height / 2, $width / 2, $height / 2, 0, 360);
/* Dessine l'ellipse dans la toile */
$img->drawImage($draw);
/* Réinitialise la couleur de remplissage, passant du violet au noir pour le texte (note : nous ré-utilisons l'objet ImagickDraw) */
$draw->setFillColor('black');
/* Définit à blanc la couleur du trait de la bordure */
$draw->setStrokeColor('white');
/* Rend plus fin le trait de la bordure */
$draw->setStrokeWidth(2);
/* Définit le crénage de la police (une valeur négative signifie que les lettres sont proches les unes des autres) */
$draw->setTextKerning(-8);
/* Définit la police et sa taille à utiliser dans le logo PHP */
$draw->setFont('Handel Gothic.ttf');
$draw->setFontSize(150);
/* On centre le texte horizontalement et verticalement */
$draw->setGravity(Imagick::GRAVITY_CENTER);
/* Ajout de "php" au centre, avec une position en Y de -10 dans la toile (à l'intérieur de l'ellipse) */
$img->annotateImage($draw, 0, -10, 0, 'php');
$img->setImageFormat('png');
/* On définit l'en-tête approprié pour le PNG et on affiche l'image */
header('Content-Type: image/png');
echo $img;
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
![Affichage de l'exemple : Création d'un logo PHP avec Imagick](https://www.gaudry.be/http://php.net/images/c0d23d2d6769e53e24a1b3136c064577-php_logo.png)
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-imagick.examples-1.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.