CodeIgniter中的多重调整大小

7

我需要将一张已加载的图片制作成两个不同大小的图片。这两个图片必须有固定的宽度,分别为180和300像素。

在我的当前结果中,这个函数只能调整并创建其中一个图片。大家都无法成功创建第二个图片,我已经尝试了整整一天,但是无法找到原因。需要帮助。

$this->_resize($data['upload_data']['file_name'], 300);
$this->_resize($data['upload_data']['file_name'], 180);
private function _resize($file_name, $size) {
            $config['image_library'] = 'gd2';
            $config['source_image'] = 'img/upload/' . $file_name;
            $config['dest_image'] = base_url() . 'img/';
            $config['create_thumb'] = TRUE;
            $config['thumb_marker'] = '_' . $size;
            $config['maintain_ratio'] = FALSE;
            $config['width'] = $size;
            $config['height'] = $size;
            $this->load->library('image_lib', $config);
            $result = $this->image_lib->resize();

            $this->image_lib->clear();
            return;
        }

我使用的是CodeIgniter 2.02版本。


看起来可能是您保存图片的位置有问题。我在文档中没有看到“dest_image”选项,也许您应该设置$config['new_image']?-- http://codeigniter.com/user_guide/libraries/image_lib.html - jessica
"thumb_marker" 将会完成路径... - Ivan Ivanic
我按照你的说法进行了更改,但服务器返回了访问错误(无法保存图像。请确保图像和文件目录可写)。 - NiLL
还有一个重要的提示,当我删除"$this->image_lib->clear();"时,错误信息"Your server does not support the GD function required to process this type of image."就消失了。 - NiLL
我猜,如果你想在循环中调整图像大小,你必须在之前初始化库,并且clear()将正常工作。完整的解决方案在这里 - http://pastebin.com/DipFxCC6 - NiLL
4个回答

16
不要多次加载image_lib。将image_lib添加到自动加载的库中并更改。
$this->load->library('image_lib', $config);
to
$this->image_lib->initialize($config);

这真的有效,CI的文档真的很差。 - Md. A. Apu

5

这可能会对你有所帮助,来自用户指南

A good practice is use the processing function conditionally, showing an error upon failure, like this:

if ( ! $this->image_lib->resize())
{
    echo $this->image_lib->display_errors();
}

您的服务器不支持GD功能,无法处理此类型的图像。 - NiLL
这是第二次迭代给我发送的。 - NiLL

1

认为这个问题发生在您的脚本第一次运行时将初始文件移动到另一个文件夹。尝试使用:

$config['new_image'] = base_url() . 'img/';

替代

$config['dest_image'] = base_url() . 'img/';

无法保存图片。请确保图片和文件目录可写。无法保存图片。请确保图片和文件目录可写。您的服务器不支持处理此类型图像所需的GD函数。 - NiLL
还有一个愚蠢的问题,你安装了GD吗? - Dmitry Evseev

1

我遇到了这个问题。在我的情况下,我将图像源和新图像放置在没有base_url或REAL_PATH的位置:

public function create_thumbnail($file_name='2012_02_23_15_06_00_1.jpg'){
    $this->layout = false;
    $image_url = PATH_TO_IMAGE_ARTICLE.DIRECTORY_SEPARATOR;
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'assets/img/content/article/'.$file_name;
    $config['create_thumb'] = FALSE;
    $config['maintain_ratio'] = TRUE;
    $config['width'] = 210;
    $config['height'] = 160;    
    $config['new_image'] = 'assets/img/content/article/thumb/thumb_' .  $file_name;

    $this->load->library('image_lib', $config);
    if(!$this->image_lib->resize())
    {
        echo $this->image_lib->display_errors();exit;
    }
    return TRUE;
}

你看吗?你没有写上

$config['new_image'] = base_url().'assets/img/content/article/thumb/thumb_' .  $file_name;

但是

$config['new_image'] = 'assets/img/content/article/thumb/thumb_' .  $file_name;

дҪҝз”Ёbase_url()пјҢдҪ зҡ„image_sourceжҲ–new_imageе°Ҷе…·жңүеүҚзјҖhttp://domain_or_localhostгҖӮеғҸC://htdocs/blablabla/иҝҷж ·дҪҝз”ЁREAL_PATHеҸӘдјҡдҪҝдәӢжғ…еҸҳеҫ—еӨҚжқӮпјҢдҫӢеҰӮдёҚеҸҜеҶҷзӯүзӯүгҖӮ - qmail_madrid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接