2014-10-17 144 views
-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。我將從研究這些文件的模式開始,分別應用一個過濾器。我想知道是否有更好的解決方案。

回答

0

我不需要圖像處理。我使用了錯誤的功能。

而不是

imagecopyresized 

我現在用的

imagecopyresampled 

和圖像的質量有所提高。