2011-01-28 7 views
1

업로드 된 이미지 파일의 임시 경로를 보유하는 $this->_tempFile이 있습니다.이미지 크기 조정이 제대로 작동하지 않습니까?

이제 이미지 크기를 조정하고 싶지만 이미지의 크기는 조정할 수 있지만 크기가 올바르게 조정되지는 않습니다. 출력은 이미지의 너비와 높이의 절반에서 커다란 검정색 사각형입니다 (너비). 그리고 다른 이미지를 사용해 보았는데 모두이 치수로 밝혀졌습니다. 293px × 453px 왜 나도 몰라요?

여기에 여기에 잘못된 무엇 scaleImage();

scaleImage(900, 582); 

public function scaleImage($width, $height){ 
    $rel_difference = array('width'=>0, 'height'=>0); 
    if($width > 604) $rel_difference['width'] = ($width-604)/604; 
    if($height > 453) $rel_difference['height'] = ($height-453)/453; 

    asort($rel_difference); 
    $tmpname = $this->_tempFile; 
    $newwidth = $width/(1+end($rel_difference)); 
    $newheight = $height/(1+end($rel_difference)); 
    $newwidth = round($newwidth); 
    $newheight = round($newheight); 
    $jpeg_quality = 90; 

    switch(exif_imagetype($tmpname)) { 
     case IMAGETYPE_GIF: 
      $img_r = imagecreatefromgif($tmpname); 
      break; 
     case IMAGETYPE_JPEG: 
      $img_r = imagecreatefromjpeg($tmpname); 
      break; 
     case IMAGETYPE_PNG: 
      $img_r = imagecreatefrompng($tmpname); 
      break; 
     default: 
      echo json_encode(array('error' => 'Not an image!')); 
      exit(0); 
      break; 
    } 
    $dst_r = ImageCreateTrueColor($newwidth, $newheight); 

    imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $newwidth , $newheight, $width, $height); 

    imagejpeg($dst_r,$tmpname,$jpeg_quality); 

    } 

내 기능입니까?

+0

> 원본 및 대상 좌표와 너비와 높이가 다른 경우 이미지 조각을 적절하게 늘리거나 줄이는 작업이 수행됩니다. 좌표는 왼쪽 위 모서리를 나타냅니다. 이 함수는 동일한 이미지 내의 영역을 복사하는 데 사용할 수 있지만 (dst_image가 src_image와 같은 경우) 영역이 겹치면 결과를 예측할 수 없습니다. – Shikiryu

답변

1

지나가는 매개 변수에서 실수로 높이와 너비를 뒤집은 것으로 의심됩니다. 그래야만

scaleImage(582, 900); 
+0

원본 포스터의 코드를 약간 수정 한 버전을 사용하여 테스트를 수행했으며 너비와 높이가 올바르게 전달되면 완벽하게 작동하지만 원래 이미지 너비가 너비 (높이와 너비)로 전달되는 경우 문제가 설명됩니다. . 그래서 MIKE C는 정확합니다. – horatio

+0

와우 롤, 그건 사실입니다! 고맙습니다 – Karem

관련 문제