PHP Conference Nagoya 2025

imagecropauto

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

imagecropautoMevcut kiplerden birini kullanarak görüntüyü otomatik olarak kırpar

Açıklama

imagecropauto(
    GdImage $görüntü,
    int $kip = IMG_CROP_DEFAULT,
    float $eşik = 0.5,
    int $rnek = -1
): GdImage|false

Belirtilen kip kullanılarak görüntü otomatik olarak kırpılır ve GDImage nesnesi olarak döndürülür.

Bağımsız Değişkenler

görüntü

imagecreatetruecolor() gibi bir görüntü oluşturma işlevinden dönen bir GdImage nesnesi.

kip

Aşağıdaki sabitlerden biri olmalıdır:

IMG_CROP_DEFAULT
IMG_CROP_TRANSPARENT ile aynıdır. PHP 7.4.0 öncesinde, görüntü şeffaf renge sahip değilse, libgd IMG_CROP_SIDES sabitini kullanırdı.
IMG_CROP_TRANSPARENT
Şeffaf artalan ile kırpar.
IMG_CROP_BLACK
Siyah artalan ile kırpar.
IMG_CROP_WHITE
Beyaz artalan ile kırpar.
IMG_CROP_SIDES
Kırpma artalanını belirlemek için görüntünün 4 köşesi kullanılır.
IMG_CROP_THRESHOLD
Görüntü, belirtilen eşik ve renk değerleri kullanılarak kırpılır.
eşik

Görüntü rengini ve kırpılacak rengi karşılaştırırken kullanılacak tolerans yüzde olarak belirtilir. Renk farkını hesaplamak için kullanılan yöntem, RGB(a) küpündeki renk mesafesine dayanmaktadır.

Sadece IMG_CROP_THRESHOLD kipinde kullanılır.

Bilginize: PHP 7.4.0 öncesinde, PHP paketinde gelen libgd biraz farklı bir algoritma kullanıyordu, bu nedenle aynı eşik, sistem ve paketli libgd için farklı sonuçlar veriyordu.

renk

Bir RGB renk değeri veya bir palet indisi.

Sadece IMG_CROP_THRESHOLD kipinde kullanılır.

Dönen Değerler

Başarı durumunda kırpılmış GDImage nesnesi, başarısızlık durumunda false döner. Görüntünün tamamı kırpılmışsa işlev false döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 görüntü bağımsız değişkeninde artık bir GdImage nesnesi aktarmak gerekiyor; evvelce resource türünde geçerli bir gd değeri gerekirdi.
8.0.0 Başarı durumunda artık GDImage örneği dönüyor; evvelce resource türünde bir değer dönerdi.
7.4.0 PHP paketinde gelen libgd'nin sistem libgd'si ile aynı eşik kırpma algoritmasını kullanması sağlandı. Böylece artık libgd IMG_CROP_DEFAULT sabitinden IMG_CROP_SIDES sabitine geri düşmüyor.
7.4.0 kip için öntanımlı değer IMG_CROP_AUTO oldu. Evvelce, IMG_CROP_DEFAULT sabitine denk gelen -1 idi. Ancak, artık -1 belirtilmesi önerilmiyor.

Örnekler

Örnek 1 - Otomatik kırpmanın doğru kullanımı

Dönen Değerler bölümünde belirtildiği gibi, görüntünün tamamı kırpılmışsa imagecropauto() false değerini döndürmektedir. Bu örnekte, yalnızca kırpılacak bir şey varsa $im otomatik olarak kırpılmaktadır; aksi takdirde özgün görüntü ile devam edilmektedir.

<?php
$cropped
= imagecropauto($im, IMG_CROP_DEFAULT);
if (
$cropped !== false) { // yeni bir nesne dönmüşse
imagedestroy($im); // özgün görüntüyü yok et
$im = $cropped; // kırpılmış görüntüyü $im'e ata
}
?>

Ayrıca Bakınız

  • imagecrop() - Görüntüyü belirtilen dikdörtgen ile kırpar
add a note

User Contributed Notes 2 notes

up
3
raphael.deiana
8 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
2 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 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