Imagefilter() : les effets spéciaux

Introduction

Le langage PHP permet de manipuler les images depuis de nombreuses années et pour appliquer des effets spéciaux sur celle-ci, nous étions obligé souvent d’effectuer de nombreuses lignes de programmation.
Depuis la version PHP 5, une fonction est apparue : « IMAGEFILTER » permettant d’obtenir des effets avec la même qualité que des logiciels de dessins.

Cette fonction permet de personnaliser l’aspect visuel de votre site ou aussi de réaliser une galerie photos différentes des autres.

Nous allons voir :

  • Les bases
  • La fonction Imagefilter
  • Jouer avec quelques types de Filtres
  •  

    Les Bases

    Avant d’utiliser ces nouveaux effets, il est important d'avoir la librairie GD active. Si celle n'est pas active, elle se trouve dans le fichier de php.ini
    Pour vérifier que celle-ci fonctionne correctement, nous allons chargée une image et l'affichée:

    <?php
    $image = @imagecreatefromjpeg('paysage.jpg'); // Charge l'image JPG

    imagejpeg($image); // Affiche l'image

    imagedestroy($image); // libère l'image
    ?>

    Voici le résultat :

    La fonction IMAGEFILTER

    Cette fonction permet d'appliquer un filtre sur une image. Elle se décompose comme ceci :

    imagefilter ( resource $image , int $filtertype [, int $arg1 [, int $arg2 [, int $arg3 ]]] )

    Cette fonction se décompose en 3 critères
    image : nom de l'image
    filtertype : le filtre de son choix
    arg : les critères si nécessaire par rapport au type de filtre choisi. La tranche de nuance permet d'effectuer de -255 à +255

    Pour illustrer nos différents exemples, nous partirons sur le paysage que nous avons affiché ci-dessus :

    IMG_FILTER_BRIGHTNESS

    Ce filtre permet de modifier la luminosité de l'image.
    Nous utiliserons que l'argument 1 (arg1). La valeur possible sera comprise entre -255 et 255 qui représente
    255 : Eclaircir l'image avec un maximum vers le blanc (effet de brillance)
    0 : Valeur par défaut. Couleur inchangée
    -255 : Assombrir l'image au maximum vers le noir (effet sombre)


    <?php
    $nom_fichier='paysage.jpg';
    $valeur=0;
    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_BRIGHTNESS, $valeur);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Voici quelques resultats avec différentes valeurs :

    $valeur=-100
    $valeur=-50
    $valeur=100
    $valeur=50

     

    IMG_FILTER_COLORIZE

    Ce filtre permet de modifier les tendances des couleurs, c’est à dire soustraire une couleur par rapport aux autres.
    Nous utiliserons les 3 arguments, qui représente Rouge, Vert, Bleu et chacune d’elles un intervalle pouvant aller de –255 à 255.

    <?php
    $nom_fichier='paysage.jpg';
    $r=100;
    $v=0;
    $b=-50;

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image,IMG_FILTER_COLORIZE,$r,$v,$b);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Voici quelques résultats avec quelques valeurs différentes :

    R : 0 V :-100 B : 0
    R : 0 V :100 B : 50
    R : 100 V : 0 B : -50

    IMG_FILTER_CONTRAST

    Ce filtre modifie le contraste de l'image. Pour déterminer ce contraste, nous utiliserons l’argument 1

    (arg1)

    La valeur possible sera comprise entre -255 et 255 qui représente
    255 : Eclaircir l'image avec un maximum vers le blanc (effet de brillance)
    0 : Valeur par défaut. Couleur inchangée
    -255 : Assombrir l'image au maximum vers le noir (effet sombre)


    <?php
    $nom_fichier='paysage.jpg';
    $valeur=-50;

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image,IMG_FILTER_CONTRAST,$valeur);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Voici quelques résultats :

    -100
    -50
    15

    IMG_FILTER_EDGEDETECT

    Ce filtre utilise la détection des bords pour les mettre en évidence dans l'image.
    Aucun argument sera utilisé car ce filtre est appliqué sur l’ensemble de l’image

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);
    imagefilter($image, IMG_FILTER_EDGEDETECT);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Pour obtenir le résultat suivant :



    IMG_FILTER_EMBOSS

    Ce filtre permet de graver l'image en relief.
    Aucun argument sera utilisé car ce filtre est appliqué sur l’ensemble de l’image

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier); /* Tentative d'ouverture */
    imagefilter($image, IMG_FILTER_EMBOSS);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Pour obtenir le résultat suivant :



    IMG_FILTER_GAUSSIAN_BLUR

    Ce filtre permet de brouiller l'image en utilisant la méthode gaussienne.
    Aucun argument n’est utilisé car ce filtre est appliqué sur l’ensemble de l’image
    Ce filtre peut être associé au filtre IMG_FILTER_SELECTIVE_BLUR (voir plus loin)

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);
    imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Pour obtenir le résultat suivant :

    IMG_FILTER_SELECTIVE_BLUR

    Ce filtre permet de rendre flou une image.
    Aucun argument n’est utilisé car ce filtre est appliqué sur l’ensemble de l’image
    Ce filtre peut être associé au filtre IMG_FILTER_GAUSSIAN_BLUR (voir plus loin)

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_SELECTIVE_BLUR);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Pour obtenir le résultat suivant :



    IMG_FILTER_SMOOTH

    Ce filtre permet de lisser l'image
    Nous utiliserons l’argument 1 (arg1) pour déterminer le degré de lissage

    La valeur possible sera comprise entre -255 et 255 qui représente
    255 : Eclaircir l'image avec un maximum vers le blanc (effet de brillance)
    0 : Valeur par défaut. Couleur inchangée
    -255 : Assombrir l'image au maximum vers le noir (effet sombre)

    <?php
    $nom_fichier='paysage.jpg';
    $valeur=50;
    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_SMOOTH, 10);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Voici quelques résultats avec des valeurs différentes :

    100
    50
    -100
    -50

    IMG_FILTER_GRAYSCALE

    Ce filtre convertit l'image en noir et blanc, c’est à dire que nous retrouvons les mêmes possibilités que le filtre IMG_FILTER_COLORIZE, sauf qu’ici, nous ne pouvons pas choisir la couleur.

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);
    imagefilter($image, IMG_FILTER_GRAYSCALE);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Pour obtenir le résultat suivant :



    IMG_FILTER_NEGATE

    Ce filtre permet de renverser toutes les couleurs de l'image pour la rendre en négative


    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_NEGATE);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Pour obtenir le résultat suivant :



    IMG_FILTER_MEAN_REMOVAL

    Ce filtre permet d’effectuer un effet de bruit

    <?php
    $nom_fichier='paysage.jpg';
    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_MEAN_REMOVAL);

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Pour obtenir le résultat suivant :

     

    Maintenant que nous avons vu l’ensemble des filtres possibles pour cette fonction, nous pouvons appliquer plusieurs filtres sur une même image


    Jouer avec quelques types de filtres

    Nous allons pour chaque effet présenté, partir sur une image d’origine différentes :


    Effet 1 : Dissocier les couleurs

    Pour effectuer cet effet qui très répandu dans les logiciels de dessins. Nous devons effectuer cette opération en 2 temps :
    Transformer l’image en Noir et blanc avec le filtre IMG_FILTER_GRAYSCALE
    Coloriser la teinte de son choix avec le filtre IMG_FILTER_COLORIZE

    <?php
    $r=255;$v=0;$b= 0;
    $r=0;$v=255;$b= 0;
    $r=0;$v=0;$b= 255;

    $nom_fichier='livreeni.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_GRAYSCALE);
    imagefilter($image, IMG_FILTER_COLORIZE, $r,$v,$b);

    imagejpeg($image);
    imagedestroy($image);

    ?>

    Pour obtenir le résultat suivant :

    Image d’origine
    r=255 v=0 b= 0
    r=0 v=255 b= 0
    r=0 v=0 b= 255

     


    Effet 2 : Effet aplatir

    Pour réaliser cet effet aplatir qui peut se rapprocher d’un effet graver, sera réalisé en 2 étapes :

    Détecte les différents de l’image avec le filtre IMG_FILTER_EDGEDETECT
    Transformer l’image en Relief avec le filtre IMG_FILTER_EMBOSS

    <?php
    $nom_fichier='afup.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    imagefilter($image, IMG_FILTER_EDGEDETECT);
    imagefilter($image, IMG_FILTER_EMBOSS);

    imagejpeg($image);
    imagedestroy($image);

    ?>


    Pour obtenir le résultat suivant :

    Image origine
    Image avec effet

     

    Effet 3 : Effet de flou

    Cet effet montre comment effectué un effet de flou. Nous utiliserons 2 filtres :

    Brouiller l’image avec le filtre IMG_FILTER_GAUSSIAN_BLUR
    Brouille un peu plus avec le filtre IMG_FILTER_SELECTIVE_BLUR

    <?php
    $nom_fichier='php_logo.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    Imagefilter ($image, IMG_FILTER_GAUSSIAN_BLUR);
    imagefilter ($image , IMG_FILTER_SELECTIVE_BLUR );

    imagejpeg($image);
    imagedestroy($image);
    ?>

    Pour obtenir le résultat suivant :

    Image origine
    Image avec effet


    Effet 4 : Effet monochrome

    Nous allons effectuer l’opération en 2 temps :

    Transformer une image en gris avec le filtre IMG_FILTER_GRAYSCALE
    Ressortir les niveaux de couleurs avec le filtre IMG_FILTER_NEGATE

    <?php
    $nom_fichier='paysage.jpg';

    $image = @imagecreatefromjpeg($nom_fichier);

    Imagefilter ($image, IMG_FILTER_GRAYSCALE);
    imagefilter ( $image , IMG_FILTER_NEGATE );

    imagejpeg($image);
    imagedestroy($image);

    ?>
    Pour obtenir le résultat suivant :
    Image origine
    Image avec effet


    Il est possible de réaliser tous sortes d’effets supplémentaires avec l’ensemble des filtres qui nous sont proposés. Il ne reste plus qu’à vous d’effectuer des tests.

    (c) Christophe Villeneuve - 2008