Applique un filtre à une image

# imagefilter

(PHP 5, PHP 7, PHP 8)

imagefilter — Applique un filtre à une image

### Description

function imagefilter(GdImage `$image`, int `$filter`, array|int|float|bool `...$args`): bool

imagefilter() applique le filtre donné `filter` sur l'`image`.

### Liste de paramètres

`image`
  Un objet GdImage, retournée par une des fonctions de création d'images, comme imagecreatetruecolor().
`filter`

  `filter` peut être l'un des éléments suivants :

  - `IMG_FILTER_NEGATE` : Inverse toutes les couleurs de l'image.
  - `IMG_FILTER_GRAYSCALE` : Convertit l'image en niveaux de gris en changeant les composantes rouge, verte et bleue en leur somme pondérée en utilisant les mêmes coefficients que le calcul luma REC.601 (Y'). Les composantes alpha sont conservées. Pour les images de la palette, le résultat peut être différent en raison des limitations de la palette.
  - `IMG_FILTER_BRIGHTNESS` : Modifie la luminosité de l'image. Utiliser `args` pour définir le niveau de luminosité. La plage de luminosité est comprise entre -255 et 255.
  - `IMG_FILTER_CONTRAST` : Modifie le contraste de l'image. Utiliser `args` pour définir le niveau de contraste.
  - `IMG_FILTER_COLORIZE` : similaire à `IMG_FILTER_GRAYSCALE`, sauf qu'il est possible de spécifier la couleur. Utiliser `args`, `arg2` et `arg3` sous la forme `red`, `green`, `blue` et `arg4` pour le canal `alpha`. La plage de chaque couleur est comprise entre 0 et 255.
  - `IMG_FILTER_EDGEDETECT` : Utilise la détection des contours pour mettre en évidence les contours de l'image.
  - `IMG_FILTER_EMBOSS` : Permet d'embosser l'image.
  - `IMG_FILTER_GAUSSIAN_BLUR` : Floute l'image à l'aide de la méthode gaussienne.
  - `IMG_FILTER_SELECTIVE_BLUR` : Floute l'image.
  - `IMG_FILTER_MEAN_REMOVAL` : Utilise la suppression de la moyenne pour obtenir un effet "croquis".
  - `IMG_FILTER_SMOOTH` : Rend l'image plus lisse. Utiliser `args` pour définir le niveau de lissage.
  - `IMG_FILTER_PIXELATE` : Applique un effet de pixellisation à l'image, utiliser `args` pour définir la taille du bloc et `arg2` pour définir le mode d'effet de pixellisation.
  - `IMG_FILTER_SCATTER` : Applique un effet de dispersion à l'image, utiliser `args` et `arg2` pour définir l'intensité de l'effet et `arg3` pour n'appliquer l'effet que sur certaines couleurs de pixels.
`args`

  - `IMG_FILTER_BRIGHTNESS` : Niveau de luminosité.
  - `IMG_FILTER_CONTRAST` : Niveau de contraste.
  - `IMG_FILTER_COLORIZE` : Valeur du composant rouge.
  - `IMG_FILTER_SMOOTH` : Niveau de lissage.
  - `IMG_FILTER_PIXELATE` : Taille du bloc en pixels.
  - `IMG_FILTER_SCATTER` : Niveau de soustraction de l'effet. Il ne doit pas être supérieur ou égal au niveau d'addition défini par `arg2`.
`arg2`

  - `IMG_FILTER_COLORIZE` : Valeur du composant vert.
  - `IMG_FILTER_PIXELATE` : Utilisation ou non de l'effet de pixellisation avancé (la valeur par défaut est `false`).
  - `IMG_FILTER_SCATTER` : Niveau d'addition de l'effet.
`arg3`

  - `IMG_FILTER_COLORIZE` : Valeur du composant bleu.
  - `IMG_FILTER_SCATTER` : Tableau optionnel de valeurs de couleur indexées pour appliquer l'effet.
`arg4`

  - `IMG_FILTER_COLORIZE` canal Alpha, une valeur entre 0 et 127. 0 indique une opacité totale tandis que 127 indique une transparence totale.

### Valeurs de retour

Cette fonction retourne `true` en cas de succès ou `false` si une erreur survient.

### Erreurs / Exceptions

Lève une ValueError si `sub` ou `plus` provoque un dépassement ou un sous-dépassement avec le `IMG_FILTER_SCATTER` `filter`.

### Historique

Version | Description
--- | ---
8.4.0 | Lève désormais une ValueError si `sub` ou `plus` provoque un dépassement ou un sous-dépassement avec le `IMG_FILTER_SCATTER` `filter`.
8.0.0 | `image` attend une instance de GdImage désormais; auparavant, une resource `gd` était attendue.
7.4.0 | La prise en charge de la dispersion (`IMG_FILTER_SCATTER`) a été ajoutée.

### Exemples

Exemple #1 Exemple de niveaux de gris avec imagefilter()

    <?php
    $im = imagecreatefrompng('dave.png');

    if($im && imagefilter($im, IMG_FILTER_GRAYSCALE))
    {
        echo 'Image converted to grayscale.';

        imagepng($im, 'dave.png');
    }
    else
    {
        echo 'Conversion to grayscale failed.';
    }
    ?>

Exemple #2 Exemple de luminosité avec imagefilter()

    <?php
    $im = imagecreatefrompng('sean.png');

    if($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
    {
        echo 'Image brightness changed.';

        imagepng($im, 'sean.png');
    }
    else
    {
        echo 'Image brightness change failed.';
    }
    ?>

Exemple #3 Exemple de colorisation avec imagefilter()

    <?php
    $im = imagecreatefrompng('philip.png');

    /* R, G, B, so 0, 255, 0 is green */
    if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
    {
        echo 'Image successfully shaded green.';

        imagepng($im, 'philip.png');
    }
    else
    {
        echo 'Green shading failed.';
    }
    ?>

Exemple #4 Exemple de négatif avec imagefilter()

    <?php
    // Définit la fonction negate afin qu'elle soit portable pour
    // les versions de php sans imagefilter()
    function negate($im)
    {
        if(function_exists('imagefilter'))
        {
            return imagefilter($im, IMG_FILTER_NEGATE);
        }

        for($x = 0; $x < imagesx($im); ++$x)
        {
            for($y = 0; $y < imagesy($im); ++$y)
            {
                $index = imagecolorat($im, $x, $y);
                $rgb = imagecolorsforindex($index);
                $color = imagecolorallocate($im, 255 - $rgb['red'], 255 - $rgb['green'], 255 - $rgb['blue']);

                imagesetpixel($im, $x, $y, $color);
            }
        }

        return(true);
    }

    $im = imagecreatefromjpeg('kalle.jpg');

    if($im && negate($im))
    {
        echo 'Image successfully converted to negative colors.';

        imagejpeg($im, 'kalle.jpg', 100);
    }
    else
    {
        echo 'Converting to negative colors failed.';
    }
    ?>

Exemple #5 Exemple de pixellisation avec imagefilter()

    <?php
    // Charge le logo PHP, nous devons créer deux instances
    // pour voir les différences
    $logo1 = imagecreatefrompng('./php.png');
    $logo2 = imagecreatefrompng('./php.png');

    // Création de l'instance d'image sur laquelle nous voulons
    // voir les différences
    $output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));

    // Applique la pixellisation sur chaque instance avec une
    // taille de bloc de 3
    imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
    imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);

    // Fusionne les différences sur l'image de sortie
    imagecopy($output, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
    imagecopy($output, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);

    // Affiche les différences
    header('Content-Type: image/png');
    imagepng($output);
    ?>

Résultat de l'exemple ci-dessus est similaire à :

Exemple #6 Exemple de dispersion avec imagefilter()

    <?php
    // Charge l'image
    $logo = imagecreatefrompng('./php.png');

    // Applique un effet de dispersion très doux à l'image
    imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);

    // Affiche l'image avec l'effet de dispersion
    header('Content-Type: image/png');
    imagepng($logo);
    ?>

Résultat de l'exemple ci-dessus est similaire à :

### Notes

> Note: Le résultat de `IMG_FILTER_SCATTER` est toujours aléatoire.

### Voir aussi

- imageconvolution() - Applique une matrice de convolution 3x3, en utilisant un coefficient et un décalage

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open