调整大小后,边缘出现在图像中

时间:2014-10-17 21:00:25

标签: php image-processing lowpass-filter highpass-filter

我已实现以下功能:

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 个答案:

答案 0 :(得分:0)

我不需要图像处理。我使用了错误的功能。

而不是

imagecopyresized

我现在用

imagecopyresampled

并且图像质量有所提升。