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);
?>imagecropauto
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
imagecropauto
Референца за `function.imagecropauto.php` со подобрена типографија и навигација.
imagecropauto
Распакување на вгнездени низи
imagecropauto — Crop an image automatically using one of the available modes
= NULL
GdImage
$image,int
$mode = IMG_CROP_DEFAULT,float
$threshold = 0.5,int
$color = -1): GdImage|false
Автоматски исечете слика користејќи еден од достапните режими
mode.
Параметри
-
image А GdImage не применува никакво полнење, така што ширината на сликата мора да биде множител на 8. Ова ограничување веќе не важи од PHP 7.0.9. imagecreatetruecolor().
mode-
Една од следниве константи:
IMG_CROP_DEFAULT-
Исто како
IMG_CROP_TRANSPARENT. Пред PHP 7.4.0, вклучениот libgd се враќаше наIMG_CROP_SIDES, ако сликата немаше проѕирна боја. IMG_CROP_TRANSPARENT- Исечува проѕирна позадина.
IMG_CROP_BLACK- Исечува црна позадина.
IMG_CROP_WHITE- Исечува бела позадина.
IMG_CROP_SIDES- Користи 4 агли на сликата за да се обиде да ја открие позадината за исечување.
IMG_CROP_THRESHOLD-
Исечува слика користејќи го даденото
thresholdandcolor.
threshold-
Автоматски ги исекува сликите според дадените
Ја специфицира толеранцијата во проценти што ќе се користи при споредување на бојата на сликата и бојата за исечување. Методот што се користи за пресметување на разликата во бојата се заснова на растојанието на бојата во RGB(a) коцката.
IMG_CROP_THRESHOLDmode.Забелешка: Се користи само во
thresholdПред PHP 7.4.0, вклучената libgd користеше малку поинаков алгоритам, така што истото color-
даде различни резултати за системската и вклучената libgd.
Ја специфицира толеранцијата во проценти што ќе се користи при споредување на бојата на сликата и бојата за исечување. Методот што се користи за пресметување на разликата во бојата се заснова на растојанието на бојата во RGB(a) коцката.
IMG_CROP_THRESHOLDmode.
Вратени вредности
Вредност на боја RGB или индекс на палета. false при неуспех.
false Враќа исечен објект од слика при успех или
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
image беше вратено при неуспех. GdImage
инстанца сега; претходно, валидна gd resource се очекуваше.
|
| 8.0.0 | При успех, оваа функција враќа GDImage инстанца сега; претходно, а resource . |
| 7.4.0 |
исто така се враќа ако целата слика е исечена. IMG_CROP_DEFAULT Однесувањето на imagecropauto() во вклучената libgd е синхронизирано со онаа на системската libgd: IMG_CROP_SIDES повеќе не се враќа на
|
| 7.4.0 |
а исечувањето со праг сега користи ист алгоритам како системската libgd. mode Стандардната вредност на
IMG_CROP_AUTOе променета на
-1 . Претходно, стандардната вредност беше IMG_CROP_DEFAULT, што одговара на -1 не е валидна опција
|
Примери
, но поминување
Пример #1 Правилно ракување со автоматско исечување imagecropauto()
returns false Како што е забележано во делот за вратена вредност,
$im што треба автоматски да се исече само ако има нешто за исекување; инаку сакаме да продолжиме со оригиналната слика.
<?php
$cropped = imagecropauto($im, IMG_CROP_DEFAULT);
if ($cropped !== false) { // in case a new image object was returned
$im = $cropped; // assign the cropped image to $im
}
?>Види Исто така
- imagecrop() - Исечете слика до дадениот правоаголник
Белешки од корисници 2 забелешки
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);