imagecropauto

(PHP 5 >= 5.5.0, PHP 7)

imagecropautoCrop an image automatically using one of the available modes

Описание

resource imagecropauto ( resource $image [, int $mode = -1 [, float $threshold = .5 [, int $color = -1 ]]] )

Automatically crops an image according to the given mode.

Список параметров

image

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor().

mode

One of the following constants:

IMG_CROP_DEFAULT
Attempts to use IMG_CROP_TRANSPARENT and if it fails it falls back to IMG_CROP_SIDES.
IMG_CROP_TRANSPARENT
Crops out a transparent background.
IMG_CROP_BLACK
Crops out a black background.
IMG_CROP_WHITE
Crops out a white background.
IMG_CROP_SIDES
Uses the 4 corners of the image to attempt to detect the background to crop.
IMG_CROP_THRESHOLD
Crops an image using the given threshold and color.
threshold

Specifies the tolerance in percent to be used while comparing the image color and the color to crop. The method used to calculate the color difference is based on the color distance in the RGB(a) cube.

Used only in IMG_CROP_THRESHOLD mode.

color

Either an RGB color value or a palette index.

Used only in IMG_CROP_THRESHOLD mode.

Возвращаемые значения

Returns a cropped image resource on success или FALSE в случае возникновения ошибки. If no cropping would occur, or the complete image would be cropped, that is treated as failure, i.e. imagecrop() returns FALSE.

Примеры

Пример #1 Proper handling of auto-cropping

As noted in the return value section, imagecropauto() returns FALSE when there is either nothing to crop or the whole image would be cropped. In this example we have an image resource $im which should be automatically cropped only if there is something to crop; otherwise we want to proceed with the original image.

<?php
$cropped 
imagecropauto($imIMG_CROP_DEFAULT);
if (
$cropped !== false) { // in case a new image resource was returned
    
imagedestroy($im);    // we destroy the original image
    
$im $cropped;       // and assign the cropped image to $im
}
?>

Коментарии

Автор:
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_THRESHOLDnull16777215);
// Rather than :
$cropped_img_white imagecropauto($original_img IMG_CROP_WHITE);

// AND

// Use this :
$cropped_img_black imagecropauto($original_img IMG_CROP_THRESHOLDnull0);
// Rather than :
$cropped_img_black imagecropauto($original_img IMG_CROP_BLACK);

?>
2016-07-19 02:49:10
http://php5.kiev.ua/manual/ru/function.imagecropauto.html
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);
2022-04-06 21:21:40
http://php5.kiev.ua/manual/ru/function.imagecropauto.html

    Поддержать сайт на родительском проекте КГБ