PHP 8.3.4 Released!

imagecropauto

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

imagecropautoRecorta uma imagem automaticamente usando um dos modos disponíveis

Descrição

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

Automaticamente recorta uma imagem de acordo com o modo informado no parâmetro mode.

Parâmetros

image

Um objeto GdImage, retornado por uma das funções de criação de imagem, como imagecreatetruecolor().

mode

Uma das constantes a seguir:

IMG_CROP_DEFAULT
O mesmo que IMG_CROP_TRANSPARENT. Antes do PHP 7.4.0, a libgd fornecida retrocedia para IMG_CROP_SIDES, se a imagem não tivesse cor transparente.
IMG_CROP_TRANSPARENT
Corta um plano de fundo transparente.
IMG_CROP_BLACK
Corta um plano de fundo preto.
IMG_CROP_WHITE
Corta um plano de fundo branco.
IMG_CROP_SIDES
Usa os 4 cantos da imagem para tentar detectar o plano de fundo a ser cortado.
IMG_CROP_THRESHOLD
Corta uma imagem usando os parâmetros threshold e color fornecidos.
threshold

Especifica a tolerância em percentagem que será usada ao comparar a cor da imagem com a cor a ser cortada. O método usado para calcular a diferença de cor é baseado na distância de cores no cubo RGB(a).

Usado somente no modo IMG_CROP_THRESHOLD.

Nota: Antes do PHP 7.4.0, a libgd fornecida usava um algotitmo ligeiramente diferente, por isso o mesmo threshold gerava resultados diferentes para a libgd de sistema e a fornecida.

color

Um valor de cor RGB ou um índice de paleta.

Usado somente no modo IMG_CROP_THRESHOLD.

Valor Retornado

Retorna um objeto de imagem cortada em caso de sucesso ou false em caso de falha. false também é retornado se a imagem for inteiramente cortada.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro image agora espera uma instância de GdImage; anteriormente, um resource gd válido era esperado.
8.0.0 Em caso de sucesso, esta função agora retorna um objeto GDImage; anteriormente, um resource era retornado.
7.4.0 O comportamento de imagecropauto() na libgd fornecida foi sincronizado com o da libgd de sistema: IMG_CROP_DEFAULT não mais retrocede para IMG_CROP_SIDES e o recorte de limites agora usa o mesmo algoritmo da libgd de sistema.
7.4.0 O valor padrão de mode mudou para IMG_CROP_AUTO. Anteriormente, o valor padrão era -1 que corresponde a IMG_CROP_DEFAULT, mas passar -1 agora foi descontinuado.

Exemplos

Exemplo #1 Gerenciamento adequado de auto-recorte

Como percebido na seção de valores de retorno, imagecropauto() retorna false se a imagem inteira foi recortada. Neste exemplo será trabalho o objeto de imagem $im que deve ser automaticamente recortado somente se houver algo a ser recortado; caso contrário será mantida a imagem original.

<?php
$cropped
= imagecropauto($im, IMG_CROP_DEFAULT);
if (
$cropped !== false) { // caso om novo objeto de imagem tenha sido retornado
imagedestroy($im); // a imagem original é destruída
$im = $cropped; // e a imagem recortada é atribuída a $im
}
?>

Veja Também

  • imagecrop() - Recorta uma imagem no retângulo informado
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