PHP 8.3.4 Released!

imagecropauto

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

imagecropautoRecadre une image automatiquement en utilisant un des modes disponibles

Description

imagecropauto(
    GdImage $image,
    int $mode = IMG_CROP_DEFAULT,
    float $threshold = 0.5,
    int $color = -1
): GdImage|false

Rogne automatiquement une image selon le mode.

Liste de paramètres

image

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

mode

Une constante parmi :

IMG_CROP_DEFAULT
Identique à IMG_CROP_TRANSPARENT. Antérieur à PHP 7.4.0, la bibliothèque libgd intégré utilisait IMG_CROP_SIDES en tant que solution de replis, si l'image n'avait pas de couleur de transparance.
IMG_CROP_TRANSPARENT
Rogne le fond transparent.
IMG_CROP_BLACK
Rogne le fond noir.
IMG_CROP_WHITE
Rogne le fond blanc.
IMG_CROP_SIDES
Utilise les 4 coins de l'image pour tenter de détecter l'arrière-plan à rogner.
IMG_CROP_THRESHOLD
Rogne l'image en utilisant le seuil threshold et color.
threshold

Spécifie la tolérance en pourcentage à utiliser lors de la comparaison de la couleur d'image et de la couleur à rogner. La méthode utilisée pour calculer la différence de couleur est basée sur la distance des couleurs dans le cube RVB(a).

Utilisé uniquement en mode IMG_CROP_THRESHOLD.

Note: Antérieur à PHP 7.4.0, la bibliothèque libgd intégré utilisait un algorithme quelque peu différent, donc le même threshold produisait des résultats différents pour libgd système et intégré.

color

Soit une valeur de couleur RVB, soit un index de palette.

Utilisé uniquement en mode IMG_CROP_THRESHOLD.

Valeurs de retour

Retourne l'objet de l'image rognée en cas de succès ou false si une erreur survient. false sera aussi retourné si toute l'image a été rognée.

Historique

Version Description
8.0.0 image attend une instance de GdImage désormais; auparavant, une resource gd était attendue.
8.0.0 En cas de succès, cette fonction retourne désormais une instance de GDImage ; auparavant, une resource était retournée.
7.4.0 Le comportement de imagecropauto de la bibliothèque libgd intégré a été syncrhonisé avec celle de libgd système : IMG_CROP_DEFAULT n'utilise plus IMG_CROP_SIDES comme solution de replis et la tolérance de rognage utilise désormais le même algorithme que libgd système.
7.4.0 La valeur par défaut de mode a été modifié en IMG_CROP_AUTO. Auparavant, la valeur par défaut était -1 qui correspond à IMG_CROP_DEFAULT, mais passer -1 est désormais obsolète.

Exemples

Exemple #1 Rognage automatique correcte

Comme indiqué dans la section valeur de retour, imagecropauto() retourne false si l'image entière a été rognée. Dans cet exemple, nous avons un objet d'image $im qui ne devrait être automatiquement rognée que s'il ya quelque chose à rogner; Sinon, nous voulons conserver à l'image originale.

<?php
$cropped
= imagecropauto($im, IMG_CROP_DEFAULT);
if (
$cropped !== false) { // Si un nouveau objet d'image a été retournée
imagedestroy($im); // nous détruisons l'image originale
$im = $cropped; // et assignons l'image rognée à $im
}
?>

Voir aussi

  • imagecrop() - Recadre une image sur le rectangle donné
add a note

User Contributed Notes 2 notes

up
3
raphael.deiana
7 years ago
In some cases the use of the IMG_CROP_WHITE or IMG_CROP_BLACK does not work. The function returns FALSE. It is best to use the IMG_CROP_THRESHOLD mode and specify the color in fourth argument as in the example below :

<?php

$original_img
= imagecreatefromjpeg($image_path);

// Use this :
$cropped_img_white = imagecropauto($original_img , IMG_CROP_THRESHOLD, null, 16777215);
// Rather than :
$cropped_img_white = imagecropauto($original_img , IMG_CROP_WHITE);

// AND

// Use this :
$cropped_img_black = imagecropauto($original_img , IMG_CROP_THRESHOLD, null, 0);
// Rather than :
$cropped_img_black = imagecropauto($original_img , IMG_CROP_BLACK);

?>
up
-1
pj dot mueller at protonmail dot ch
1 year ago
I don’t know why you can’t set the threshold for the four sides filter (IMG_CROP_SIDES) so here’s how to do it manually using the IMG_CROP_THRESHOLD filter instead.

$threshold = .5;

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

$width = imagesx($im);
$height = imagesy($im);

$arr = [
[0,0],
[$width-1,0],
[0,$height-1],
[$width-1,$height-1],
];

$red = 0;
$green = 0;
$blue = 0;

// grab the colours from all four corners
foreach( $arr as $arr2 ) {
$thisColor = imagecolorat($im, $arr2[0], $arr2[1]);

$rgb = imagecolorsforindex($im, $thisColor);
$red += round(round(($rgb['red'] / 0x33)) * 0x33);
$green += round(round(($rgb['green'] / 0x33)) * 0x33);
$blue += round(round(($rgb['blue'] / 0x33)) * 0x33);
}

// and average them
$red /= 4;
$green /= 4;
$blue /= 4;

$newColor = imagecolorallocate($im, $red, $green, $blue);

$cropped = imagecropauto($im, IMG_CROP_THRESHOLD, $threshold, $newColor);

imagejpg($cropped, 'somefile.cropped.jpg');

imagedestroy($im);
imagedestroy($cropped);
To Top