imagecrop

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

imagecropCrop an image to the given rectangle

说明

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

Crops an image to the given rectangular area and returns the resulting image. The given image is not modified.

参数

image

由图象创建函数(例如imagecreatetruecolor())返回的 GdImage 对象。

rectangle

The cropping rectangle as array with keys x, y, width and height.

返回值

Return cropped image object on success 或者在失败时返回 false.

更新日志

版本 说明
8.0.0 image 现在需要 GdImage 实例;之前需要有效的 gd resource
8.0.0 On success, this function returns a GDImage instance now; previously, a resource was returned.

示例

示例 #1 imagecrop() example

This example shows how to crop an image to a square area.

<?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() - Crop an image automatically using one of the available modes
add a note add a note

User Contributed Notes 3 notes

up
14
robert at woodst dot com
8 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
7 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
7 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