-1
我已實現了以下功能之後:邊緣出現在圖像縮放
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;
}
}
}
然而,邊緣出現,線條不直,即使他們原先筆直。我相信我可以用高通濾波器,低通濾波器和鹽濾波器組合來解決我的問題,但我不確定我是如何實現它的png,jpeg和gif。我將從研究這些文件的模式開始,分別應用一個過濾器。我想知道是否有更好的解決方案。