2014-10-17 3 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 

사용하여 이미지의 품질이 향상되었습니다.