2010-03-06 130 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();