Края появляются на изображении после изменения размера

Я реализовал следующую функцию:

private static function generatePicture($sizeKey, $src, $initialWidth, $initialHeight, $imageType) {
$destination = AdImage::addSizeKey($sizeKey, $src);
if (file_exists($destination)) {
return;
}
$finalSize = AdImage::$sizes[$sizeKey];
$initialRatio = $initialWidth / $initialHeight;
$finalRatio = $finalSize["w"] / $finalSize["h"];
$newImage = imagecreatetruecolor($finalSize["w"], $finalSize["h"]);
imagealphablending( $newImage, false );
imagesavealpha( $newImage, true );
$oldImage = imagecreatefromstring(file_get_contents($src));
if ($initialRatio >= $finalRatio) {
$scale = $finalSize["h"] / $initialHeight;
$surpluss = abs($initialWidth - ($initialHeight * $finalRatio));
imagecopyresized($newImage, $oldImage, 0, 0, $surpluss / 2, 0, $finalSize["w"], $finalSize["h"], $initialWidth - $surpluss, $initialHeight);
} else {
$scale = $finalSize["w"] / $initialWidth;
$surpluss = abs($initialHeight - ($initialWidth / $finalRatio));
imagecopyresized($newImage, $oldImage, 0, 0, 0, $surpluss / 2, $finalSize["w"], $finalSize["h"], $initialWidth, $initialHeight - $surpluss);
}
switch ($imageType) {
case IMAGETYPE_JPEG: {
imagejpeg($newImage, $destination, 100);
break;
}
case IMAGETYPE_PNG: {
imagepng($newImage, $destination);
break;
}
case IMAGETYPE_GIF: {
imagegif($newImage, $destination);
break;
}
default:
{
imagejpeg($newImage, $destination, 100);
break;
}
}

}

Однако края появляются, линии не прямые, даже если они изначально были прямыми. Я верю, что смогу решить мою проблему с помощью фильтра верхних частот, фильтра нижних частот и соли & Фильтр piper, но я не уверен, как реализовать его для png, jpeg и gif. Я бы начал с изучения структуры этих файлов и применил фильтр отдельно. Интересно, есть ли лучшее решение?

-1

Решение

Мне не нужно было обрабатывать изображения. Я использовал неправильную функцию.

Вместо

imagecopyresized

Сейчас пользуюсь

imagecopyresampled

и качество изображений улучшилось.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]