PHP Conference Fukuoka 2025

imagecropauto

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

imagecropautoRecorta una imagen automáticamente utilizando uno de los modos disponibles

Descripción

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

Recorta automáticamente una imagen según el mode.

Parámetros

image

Un objeto GdImage, retornado por una de las funciones de creación de imágenes, como imagecreatetruecolor().

mode

Una constante entre:

IMG_CROP_DEFAULT
Idéntico a IMG_CROP_TRANSPARENT. Anterior a PHP 7.4.0, la biblioteca libgd integrada utilizaba IMG_CROP_SIDES como solución de respaldo, si la imagen no tenía color de transparencia.
IMG_CROP_TRANSPARENT
Recorta el fondo transparente.
IMG_CROP_BLACK
Recorta el fondo negro.
IMG_CROP_WHITE
Recorta el fondo blanco.
IMG_CROP_SIDES
Utiliza las 4 esquinas de la imagen para intentar detectar el fondo a recortar.
IMG_CROP_THRESHOLD
Recorta la imagen utilizando el umbral threshold y color.
threshold

Especifica la tolerancia en porcentaje a utilizar durante la comparación de la color de la imagen y la color a recortar. El método utilizado para calcular la diferencia de color se basa en la distancia de colores en el cubo RVB(a).

Utilizado únicamente en modo IMG_CROP_THRESHOLD.

Nota: Anterior a PHP 7.4.0, la biblioteca libgd integrada utilizaba un algoritmo algo diferente, por lo que el mismo threshold producía resultados diferentes para libgd sistema e integrado.

color

Puede ser un valor de color RVB o un índice de paleta.

Utilizado únicamente en modo IMG_CROP_THRESHOLD.

Valores devueltos

Devuelve el objeto de la imagen recortada en caso de éxito o false si ocurre un error. false también será devuelto si toda la imagen ha sido recortada.

Historial de cambios

Versión Descripción
8.0.0 image expects a GdImage instance now; previously, a valid gd resource was expected.
8.0.0 En caso de éxito, esta función devuelve ahora una instancia de GDImage; anteriormente, se devolvía un resource.
7.4.0 El comportamiento de imagecropauto de la biblioteca libgd integrada ha sido sincronizado con la de libgd sistema: IMG_CROP_DEFAULT ya no utiliza IMG_CROP_SIDES como solución de respaldo y la tolerancia de recorte utiliza ahora el mismo algoritmo que libgd sistema.
7.4.0 El valor por omisión de mode ha sido modificado a IMG_CROP_AUTO. Anteriormente, el valor por omisión era -1 que corresponde a IMG_CROP_DEFAULT, pero pasar -1 está ahora obsoleto.

Ejemplos

Ejemplo #1 Recorte automático correcto

Como se indica en la sección valor de retorno, imagecropauto() devuelve false si toda la imagen ha sido recortada. En este ejemplo, tenemos un objeto de imagen $im que solo debería ser automáticamente recortado si hay algo que recortar; de lo contrario, se desea conservar la imagen original.

<?php
$cropped
= imagecropauto($im, IMG_CROP_DEFAULT);
if (
$cropped !== false) { // Si se ha devuelto un nuevo objeto de imagen
$im = $cropped; // y asigna la imagen recortada a $im
}
?>

Ver también

  • imagecrop() - Recorta una imagen en el rectángulo dado
add a note

User Contributed Notes 2 notes

up
2
raphael.deiana
9 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
0
pj dot mueller at protonmail dot ch
3 years 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 cornersforeach( $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