我的用户正在上传任意大小XX x YY的图片。我想找到更大的尺寸并将图像缩小到250x250的正方形,并添加透明填充以弥补差异。有没有办法用CI的Image Lib来实现这个目标?
答案 0 :(得分: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();
有关详细信息,请参阅CodeIgniter API中的Image Manipulation Class
虽然说实话,但我发现CI的图像处理库是不够的。它不是非常灵活,对于重复或组合动作(如上所述)并不是很快,并且它使用了一种残暴的语法(对于某些类型的应用程序可能会派上用场,但我个人更喜欢像{ {3}}):
事实上,我最近为PHP Thumb(PHP Thumb)组装了一个简单的包装器库,以便与CodeIgniter一起使用,它的工作非常棒。使用PHP Thumb库而不是CodeIgniter自己的,你可以像这样完成工作:
$this->load->library('phpthumb_lib');
$thumb = phpthumb_lib::create('/path/to/image/mypic.jpg');
$thumb->adaptiveResize(250, 250);
$thumb->save();
有关download的更多详情。
只有这样才能用透明像素填充图像(我认为这是一种不好的做法),它只是调整图像大小并裁剪图像以适应整个250x250像素区域,而不会拉伸图像。
或者,您可以将图像调整为适合 250x250像素框(使用resize
而不是adaptiveResize
),然后将图像放在250x250px内DIV容器。我猜这可能是你想要的解决方案。
答案 1 :(得分: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();