Fix Core\Image\GDDriver

This commit is contained in:
Visman 2021-11-27 21:22:16 +07:00
parent 21b2b03ff1
commit 170f8cfbb2

View file

@ -27,7 +27,7 @@ class GDDriver extends DefaultDriver
public function readFromStr(string $data) /* : mixed|false */
{
return $this->ready ? \imagecreatefromstring($data) : false;
return $this->tuning($this->ready ? \imagecreatefromstring($data) : false);
}
public function readFromPath(string $path) /* : mixed|false */
@ -38,7 +38,22 @@ class GDDriver extends DefaultDriver
) {
return false;
} else {
return \imagecreatefromstring(\file_get_contents($path));
return $this->tuning(\imagecreatefromstring(\file_get_contents($path)));
}
}
protected function tuning(/* mixed */ $image) /* : mixed */
{
if (
false !== $image
&& (
false === \imagealphablending($image, false)
|| false === \imagesavealpha($image, true)
)
) {
throw new FileException('Failed to adjust image');
} else {
return $image;
}
}
@ -80,9 +95,14 @@ class GDDriver extends DefaultDriver
$oldW = \imagesx($image);
$oldH = \imagesy($image);
$wr = ($maxW < 1) ? 1 : $maxW / $oldW;
$hr = ($maxH < 1) ? 1 : $maxH / $oldH;
$wr = $maxW < 16 ? 1 : $maxW / $oldW;
$hr = $maxH < 16 ? 1 : $maxH / $oldH;
$r = \min($wr, $hr, 1);
if (1 == $r) {
return $image;
}
$width = (int) \round($oldW * $r);
$height = (int) \round($oldH * $r);
@ -105,12 +125,9 @@ class GDDriver extends DefaultDriver
) {
throw new FileException('Failed to convert image to palette');
}
if (
false === \imagealphablending($result, false)
|| false === \imagesavealpha($result, true)
) {
throw new FileException('Failed to adjust image');
}
$result = $this->tuning($result);
if (false === \imagecopyresampled($result, $image, 0, 0, 0, 0, $width, $height, $oldW, $oldH)) {
throw new FileException('Failed to resize image');
}