mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
FIX: Image resizing breaks when one of the resized image dimensions is between 0 and 1.
Solution: Round up to 1 instead of down to 0. Converted php errors to exceptions in the process.
This commit is contained in:
parent
c8ad29f0d7
commit
392ddef2e8
@ -176,18 +176,20 @@ class GDBackend extends Object implements Image_Backend {
|
||||
public function resize($width, $height) {
|
||||
if(!$this->gd) return;
|
||||
|
||||
$width = round($width);
|
||||
$height = round($height);
|
||||
if($width < 0 || $height < 0) throw new InvalidArgumentException("Image resizing dimensions cannot be negative");
|
||||
if(!$width && !$height) throw new InvalidArgumentException("No dimensions given when resizing image");
|
||||
if(!$width) throw new InvalidArgumentException("Width not given when resizing image");
|
||||
if(!$height) throw new InvalidArgumentException("Height not given when resizing image");
|
||||
|
||||
//use whole numbers, ensuring that size is at least 1x1
|
||||
$width = max(1, round($width));
|
||||
$height = max(1, round($height));
|
||||
|
||||
// Check that a resize is actually necessary.
|
||||
if ($width == $this->width && $height == $this->height) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
if(!$width && !$height) user_error("No dimensions given", E_USER_ERROR);
|
||||
if(!$width) user_error("Width not given", E_USER_ERROR);
|
||||
if(!$height) user_error("Height not given", E_USER_ERROR);
|
||||
|
||||
$newGD = imagecreatetruecolor($width, $height);
|
||||
|
||||
// Preserves transparency between images
|
||||
|
@ -105,8 +105,14 @@ class ImagickBackend extends Imagick implements Image_Backend {
|
||||
public function resize($width, $height) {
|
||||
if(!$this->valid()) return;
|
||||
|
||||
$width = round($width);
|
||||
$height = round($height);
|
||||
if($width < 0 || $height < 0) throw new InvalidArgumentException("Image resizing dimensions cannot be negative");
|
||||
if(!$width && !$height) throw new InvalidArgumentException("No dimensions given when resizing image");
|
||||
if(!$width) throw new InvalidArgumentException("Width not given when resizing image");
|
||||
if(!$height) throw new InvalidArgumentException("Height not given when resizing image");
|
||||
|
||||
//use whole numbers, ensuring that size is at least 1x1
|
||||
$width = max(1, round($width));
|
||||
$height = max(1, round($height));
|
||||
|
||||
$geometry = $this->getImageGeometry();
|
||||
|
||||
@ -115,10 +121,6 @@ class ImagickBackend extends Imagick implements Image_Backend {
|
||||
return $this;
|
||||
}
|
||||
|
||||
if(!$width && !$height) user_error("No dimensions given", E_USER_ERROR);
|
||||
if(!$width) user_error("Width not given", E_USER_ERROR);
|
||||
if(!$height) user_error("Height not given", E_USER_ERROR);
|
||||
|
||||
$new = clone $this;
|
||||
$new->resizeImage($width, $height, self::FILTER_LANCZOS, 1);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user