2011-06-17 119 views
1

我有一個400×350像素的圖像。我必須將它放入一個90像素×80像素的框中。無論何時我使用此代碼調整其大小:如何在PHP中調整圖像大小以適合保存寬高比的自定義大小的框?

****************** Create Thumbnails *************************************/ 
$imageEditor = new ImageEditor($image_name, $path); 
$imageEditor->resize(90, 80); 
$imageEditor->outputFile($image_name, $paththumbnail); 
$imageEditor->outputFile(); 
**************************************************************************/ 

輸出圖像在保持高寬比的情況下較小。 我怎樣才能得到準確的圖像調整大小?

+0

你的問題對我來說並不完全清楚。你想讓你的縮略圖精確到90×80像素嗎?這意味着您將不得不在左側和右側切斷大約1px(80/350 * 400 = 91.4> 90)。那是你要的嗎? – 2011-06-17 14:41:10

回答

2
$thumb_width = 90; 
$thumb_max_height = 80; 

$imageEditor = new ImageEditor($image_name, $path); 

// get the size of the image 
list($width_orig, $height_orig, $image_type) = getimagesize($path . $image_name); 

// calculate the aspect ratio 
$aspect_ratio = (float) $height_orig/$width_orig; 

// calculate new height 
$thumb_height = round($thumb_width * $aspect_ratio); 

while($thumb_height>$thumb_max_height) 
{ 
    $thumb_width -= 10; 
    $thumb_height = round($thumb_width * $aspect_ratio); 
} 

// resize 
$imageEditor->resize($thumb_width, $thumb_height); 

$imageEditor->outputFile($image_name, $paththumbnail); 
$imageEditor->outputFile(); 
0

這是一個簡單的函數來調整您的圖像在PHP中。 只需要傳遞你想要的圖像大小。

/*********************************************************** 
    *  Custom Image Resize and cropping function 
    ***********************************************************/ 
    function custom_resize($url, $width, $height = null, $crop = null, $single = true) { 
     //echo '<br>Width :'.$width.' Height'.$height; 
     //validate inputs 
     if (!$url OR !$width) 
     return false; 

     //define upload path & dir 
     $upload_info = wp_upload_dir(); 
     $upload_dir = $upload_info['basedir']; 
     $upload_url = $upload_info['baseurl']; 

     //check if $img_url is local 
     if (strpos($url, $upload_url) === false) 
      return false; 

     //define path of image 
     $rel_path = str_replace($upload_url, '', $url); 
     $img_path = $upload_dir . $rel_path; 

     //check if img path exists, and is an image indeed 
     if (!file_exists($img_path) OR !getimagesize($img_path)) 
     return false; 

     //get image info 
     $info = pathinfo($img_path); 
     $ext = $info['extension']; 
     list($orig_w, $orig_h) = getimagesize($img_path); 

     //get image size after cropping 
     $dims = image_resize_dimensions($orig_w, $orig_h, $width, $height, $crop); 
     $dst_w = $dims[4]; 
     $dst_h = $dims[5]; 

     //use this to check if cropped image already exists, so we can return that instead 
     $suffix = "{$dst_w}x{$dst_h}"; 
     $dst_rel_path = str_replace('.' . $ext, '', $rel_path); 
     $destfilename = "{$upload_dir}{$dst_rel_path}-{$suffix}.{$ext}"; 

     if (!$dst_h) { 
     //can't resize, so return original url 
     //echo '<br>Width :'.$width.' Height'.$height; 
     $img_url = $url; 
     $dst_w = $orig_w; 
     $dst_h = $orig_h; 
     } 
     //else check if cache exists 
     elseif (file_exists($destfilename) && getimagesize($destfilename)) { 
     //echo '<br>Width :'.$width.' Height'.$height; 
     $img_url = "{$upload_url}{$dst_rel_path}-{$suffix}.{$ext}"; 
     } 
     //else, we resize the image and return the new resized image url 
     else { 

     // Note: pre-3.5 fallback check 
     if (function_exists('wp_get_image_editor')) { 

      $editor = wp_get_image_editor($img_path); 

      if (is_wp_error($editor) || is_wp_error($editor->resize($width, $height, $crop))) 
       return false; 

      $resized_file = $editor->save(); 

      if (!is_wp_error($resized_file)) { 
       $resized_rel_path = str_replace($upload_dir, '', $resized_file['path']); 
       $img_url = $upload_url . $resized_rel_path; 
      } else { 
       return false; 
      } 
      } else { 

       $resized_img_path = image_resize($img_path, $width, $height, $crop); 
       if (!is_wp_error($resized_img_path)) { 
        $resized_rel_path = str_replace($upload_dir, '', $resized_img_path); 
        $img_url = $upload_url . $resized_rel_path; 
       } else { 
        return false; 
       } 
      } 
     } 

     //return the output 
     if ($single) { 
     //str return 
      $image = $img_url; 
     } else { 
     //array return 
      $image = array(
       0 => $img_url, 
       1 => $dst_w, 
       2 => $dst_h 
      ); 
     } 
     return $image; 
    } 

// **************** Use of these function ********************* 

<img src="<?php echo custom_resize($img_url,270,270,true); ?>" /> 
相關問題