PHP Velho Oeste 2024

imagecrop

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

imagecrop指定した矩形に画像をクロップする

説明

imagecrop(GdImage $image, array $rectangle): GdImage|false

画像を指定した矩形範囲にクロップして、クロップ後の画像を返します。 パラメータ image で渡した画像には何も手を加えません。

パラメータ

image

imagecreatetruecolor()のような画像作成関数が返す GdImage オブジェクト。

rectangle

クロップする矩形を配列で指定します。配列のキーには x, y, width, height を指定します。

戻り値

成功した場合にクロップ後の画像オブジェクトを返します。 失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 image は、 GdImage クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な gd resource が期待されていました。
8.0.0 成功時には、 この関数は GDImage クラスのインスタンスを返すようになりました。 これより前のバージョンでは、 resource を返していました。

例1 imagecrop() の例

この例は、画像を正方形にクロップする方法を示すものです。

<?php
$im
= imagecreatefrompng('example.png');
$size = min(imagesx($im), imagesy($im));
$im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]);
if (
$im2 !== FALSE) {
imagepng($im2, 'example-cropped.png');
imagedestroy($im2);
}
imagedestroy($im);
?>

参考

  • imagecropauto() - 利用可能なモードを指定して、画像を自動的にクロップする
add a note add a note

User Contributed Notes 3 notes

up
14
robert at woodst dot com
7 years ago
It appears that imagecrop() will output a black line along the bottom the resulting image until version 5.6.12. Your only choices are to upgrade PHP or use imagecopyresampled().

http://php.net/ChangeLog-5.php#5.6.12 (bug #67447)
up
-11
shaun at slickdesign dot com dot au
6 years ago
Use imagecopyresampled to crop your image instead, and it should work correctly in PHP 5.5+ without any black lines.

<?php
// Desired function call.
$cropped = imagecrop( $image, array( 'x' => $x, 'y' => $y, 'width' => $width, 'height' => $height ) );

// Equivalent function which works in both PHP pre 5.6.12 and 5.6.12+.
$cropped = imagecreatetruecolor( $width, $height );
imagecopyresampled( $cropped, $image, 0, 0, $x, $y, $width, $height, $width, $height );
?>
up
-14
vanadragos at yahoo dot com
6 years ago
To get the center crop of a image in php:

           
$new = imagecreatefromjpeg($uploadedfile);

    $crop_width = imagesx($new);
    $crop_height = imagesy($new);
               
            $size = min($crop_width, $crop_height);
           
           
            if($crop_width >= $crop_height) {
            $newx= ($crop_width-$crop_height)/2;
           
            $im2 = imagecrop($new, ['x' => $newx, 'y' => 0, 'width' => $size, 'height' => $size]);
            }
            else {
                $newy= ($crop_height-$crop_width)/2;
           
                $im2 = imagecrop($new, ['x' => 0, 'y' => $newy, 'width' => $size, 'height' => $size]);
                }
           
               
    imagejpeg($im2,$filename,90);
To Top