2011-03-15 108 views
2

我使用這個功能用縮放比例調整圖像大小?

function resize($width,$height) { 

    $new_image = imagecreatetruecolor($width, $height); 

    imagesavealpha($new_image, true); 
    $trans_colour = imagecolorallocatealpha($new_image, 0, 0, 0, 127); 
    imagefill($new_image, 0, 0, $trans_colour); 

    imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); 
    $this->image = $new_image; 
} 

我想要做的就是讓一個正方形圖像。我想調整最小的屬性,而不是更大的數字被擠壓。我希望切掉邊緣。

所以,如果我有一個圖像是213×180,我需要調整大小到150×150

我可以將圖像的大小調整爲150高度它擊中此功能之前。

我不知道該怎麼做就是取寬度並切掉邊緣以獲得150寬度而不失真。

有誰知道如何做到這一點?

+0

所以你要調整前裁剪圖像方?爲什麼不調整保持縱橫比然後裁剪哪個尺寸大於150? – Treffynnon 2011-03-15 09:32:38

+1

如果您不想陷入低級映像操作,強烈建議使用wideimage庫(http://wideimage.sourceforge.net/)。 – 2011-03-15 09:33:12

回答

2

通過「砍掉」我猜邊你的意思是使作物你的形象,對不對?您可以使用來裁剪圖像。

一個小例子:

$imageSrc = //Your source image; 
$tempImage = imagecreatetruecolor(150,150); 
// CropStartX et cropStartY have to be computed to suit your needs 
imagecopyresized($tempImage,$imageSrc,0,0,$cropStartX,$cropStartY,150,150,150,150); 
// $tempImage now contain your cropped image. 
2

這是從我的一個老項目複製,做你所需要的:

static public function resizeCropAndMove($from_path, $to_path, $max_width, $max_height) 
    { 
    $image_info = getImageSize($from_path); 
    switch ($image_info['mime']) { 
     case 'image/jpeg': $input = imageCreateFromJPEG($from_path); break; 
     default: 
     return false; 
    } 

    $input_width = imagesx($input); 
    $input_height = imagesy($input); 

    $output = imageCreateTrueColor($max_width, $max_height); 

    if ($input_width <= $input_height) { //portrait 
    $lamda = $max_width/$input_width; 

    if ($lamda < 1) { 
     $temp_width = (int)round($lamda * $input_width); 
     $temp_height = (int)round($lamda * $input_height); 

     $temp = imagecreatetruecolor($temp_width, $temp_height); 
     imageCopyResampled($temp, $input, 0, 0, 0, 0, $temp_width, $temp_height, $input_width, $input_height); 

     $top = (int)round(($temp_height - $max_height)/2); 
     $left = 0; 
    }  
    } else { //landscape 
    $lamda = $max_height/$input_height; 

    if ($lamda < 1) { 
     $temp_width = (int)round($lamda * $input_width); 
     $temp_height = (int)round($lamda * $input_height); 

     $temp = imagecreatetruecolor($temp_width, $temp_height); 
     imageCopyResampled($temp, $input, 0, 0, 0, 0, $temp_width, $temp_height, $input_width, $input_height); 

     $left = (int)round(($temp_width - $max_width)/2); 
     $top = 0; 
    } 
    } 

    if ($lamda < 1) { 
    imageCopyResampled($output, $temp, 0, 0, $left, $top, $max_width, $max_height, $max_width, $max_height); 
    imagePNG($output, $to_path); 
    imagedestroy($temp); 
    } else { 
    imagePNG($input, $to_path); 
    } 

    imageDestroy($input); 
    imageDestroy($output); 
    } 
2
function createCroppedThumb($thumbSourcePath, $thumbSavePath, $thumbDim){ 

     // Get dimensions of the original image 
     $detail    = getimagesize($thumbSourcePath); 
     $current_width  = $detail[0]; 
     $current_height  = $detail[1]; 
     $imageType   = $detail[2]; 

     // The x and y coordinates on the original image where we 
     // will begin cropping the image 
     $left = 0; 
     $top = 0; 

     // This will be the final size of the image (e.g. how many pixels 
     // left and down we will be going) 
     $crop_width  = $thumbDim; 
     $crop_height = $thumbDim; 

     // Resample the image 
     $canvas = imagecreatetruecolor($crop_width, $crop_height); 

     switch($imageType){ 
      case '1': 
      $current_image = imagecreatefromgif($thumbSourcePath); 
      break; 

      case '2': 
      $current_image = imagecreatefromjpeg($thumbSourcePath); 
      break; 

      case '3': 
      $current_image = imagecreatefrompng($thumbSourcePath); 
      break; 

      default: 
      throw new Exception('unknown image type'); 
      break;  
     } 
     imagecopy($canvas, $current_image, 0, 0, $left, $top, $current_width, $current_height); 

     switch($imageType){ 
      case '1': 
      imagegif($canvas,$thumbSavePath,100); 
      break; 

      case '2': 
      imagejpeg($canvas,$thumbSavePath,100); 
      break; 

      case '3': 
      imagepng($canvas,$thumbSavePath,100); 
      break; 

      default: 
      throw new Exception('unknown image type'); 
      break;  
     } 
}