2010-03-06 123 views
2

我的用戶上傳的圖片大小爲XX x YY。我想找到更大的尺寸並將圖像縮小到250x250的正方形,並添加透明填充以彌補差異。有沒有什麼辦法可以用CI的Image Lib完成這個任務?如何使用CodeIgniter填充圖像?

回答

8

試試這個:

$config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['maintain_ratio'] = TRUE; 
$config['width'] = 250; 
$config['height'] = 250; 

$this->load->library('image_lib', $config); 
$this->image_lib->resize(); 

$config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['maintain_ratio'] = FALSE; 
$config['width'] = 250; 
$config['height'] = 250; 

$this->image_lib->initialize($config); 
$this->image_lib->crop(); 

有關詳細信息,從笨API

看到Image Manipulation Class雖然相當誠實,我不覺得CI的圖像處理庫是足夠的。這是不是很靈活,它不是重複或組合動作(像上面的)速度非常快,它使用一個窮兇極惡的語法(可能派上用場的某些類型的應用程序,但我個人更喜歡像PHP Thumb ):


事實上,我最近整理了PHP拇指(download)使用CodeIgniter使用一個簡單的包裝庫,和它的作品驚人。使用PHP拇指庫,而不是CodeIgniter的自己,你可以把工作像這樣做:在PHP Thumb's GitHub page

$this->load->library('phpthumb_lib'); 
$thumb = phpthumb_lib::create('/path/to/image/mypic.jpg'); 
$thumb->adaptiveResize(250, 250); 
$thumb->save(); 

更多細節。

只有這並不墊透明像素(我會考慮一個不好的做法)的圖像,它只是調整大小和裁剪圖像,以適應整個250x250的像素面積不拉伸的圖像。

或者,你可以把圖像尺寸調整到適合裏面一個250x250的像素盒(通過使用resize而不是adaptiveResize),然後將250x250px DIV容器裏面的圖片。我猜這可能是你想要的解決方案。

1

我不裁剪圖像,而把它放在一個div的背景。這是我的代碼。

1)裏面的幫手的地方這一點。

function getSmallerDimension($img_path, $width, $height) { 
    list($wid, $hei, $type, $attr)= getimagesize($img_path); 
    $ratio = $wid/$hei; 

    if($height < $width/$ratio) { 
     return 'width'; 
    } 
    else if($width < $height * $ratio) { 
     return 'height'; 
    } 
    else { 
     return 'auto'; 
    } 
} 

2)使用它來調整大小。

$config['image_library'] = 'gd2'; 
$config['source_image'] = 'source-path/source.jpg'; 
$config['create_thumb'] = true; 
$config['thumb_marker'] = '-thumb'; 
$config['maintain_ratio'] = true; 
$config['width'] = 250; 
$config['height'] = 250; 
$config['master_dim'] = getSmallerDimension('source-path/source.jpg', 250, 250); 
$this->load->library('image_lib', $config); 
$this->image_lib->resize();