如何使用CodeIgniter填充图像?

时间:2010-03-06 21:19:50

标签: codeigniter image-manipulation

我的用户正在上传任意大小XX x YY的图片。我想找到更大的尺寸并将图像缩小到250x250的正方形,并添加透明填充以弥补差异。有没有办法用CI的Image Lib来实现这个目标?

2 个答案:

答案 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();