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 — Crop an image to the given rectangle
Crops an image to the given rectangular area and returns the resulting image.
The given image
is not modified.
image
Una risorsa immagine, restituita da una delle funzioni di creazione immagine, come imagecreatetruecolor().
rectangle
The cropping rectangle as array with keys
x
, y
, width
and
height
.
Return cropped image object on success o false
in caso di fallimento.
Versione | Descrizione |
---|---|
8.0.0 |
image expects a GdImage
instance now; previously, a valid gd resource was expected.
|
8.0.0 | On success, this function returns a GDImage instance now; previously, a resource was returned. |
Example #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);
?>
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);