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)
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
imagecrop — Обрезать изображение до заданного прямоугольника
Обрезает изображение до заданной прямоугольной области и возвращает полученное изображение.
Заданный параметр image
не изменяется.
image
Объект GdImage, который возвращает одна из функций, создающих изображения, например, imagecreatetruecolor().
rectangle
Обрезанный прямоугольник в виде массива (array) с ключами
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);
?>
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)
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 );
?>
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);