【问题标题】:Codeigniter multiple file upload with image resizing/thumnail creationCodeigniter 多个文件上传与图像调整/缩略图创建
【发布时间】:2013-12-20 04:17:45
【问题描述】:

我正在尝试上传多张图片,重新调整这些图片的大小,然后通过 codeigniter 为这些图片创建缩略图。

$config['upload_path'] = '---path---';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = FALSE;

$this->load->library('upload');

$files = $_FILES;
$cpt = count($_FILES['files']['name']);
for($i=0; $i<$cpt; $i++)
{
    $_FILES['files']['name']= $files['files']['name'][$i];
    $_FILES['files']['type']= $files['files']['type'][$i];
    $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i];
    $_FILES['files']['error']= $files['files']['error'][$i];
    $_FILES['files']['size']= $files['files']['size'][$i];    

    $this->upload->initialize($config);
    $this->upload->do_upload('files');
    $tmp = $this->upload->data();

        $this->load->library('image_lib'); 
        //Thumbnail configs
        $config_t['source_image']   = '---path---' . $tmp['file_name'];
        $config_t['new_image']  = '--path to thumbnail ---' . $tmp['file_name'];
        $config_t['create_thumb'] = TRUE;
        $config_t['maintain_ratio'] = TRUE;
        $config_t['width']   = 110;
        $config_t['height'] = 110;
        //end of configs

            $this->load->library('image_lib', $config_t); 
            $this->image_lib->initialize($config_t);
            if(!$this->image_lib->resize())
                echo "Failed." . $this->image_lib->display_errors();

        //Resize Configs
        $config_r['source_image']   = '----path----' . $tmp['file_name'];
        $config_r['maintain_ratio'] = TRUE;
        $config_r['width']   = 800;
        $config_r['height'] = 800;
        $config_r['quality']    = 100;
        //end of configs

            $this->load->library('image_lib', $config_r); 
            $this->image_lib->initialize($config_r);
            if(!$this->image_lib->resize())
                echo "Failed." . $this->image_lib->display_errors();

}

图片上传工作正常,每张图片都上传,问题是图片处理:

未显示错误,但图像未调整为 800x800 像素或 100x100

编辑::

图像被复制到缩略图文件夹中,它们只是重命名了 _thumb。然而,缩略图被重新调整为 800 像素的“某物”,例如:

1289 像素乘 800 像素

它们应该是 100px x 100px,原始图像仍然没有被调整大小

编辑::

如果我删除重新调整大小的配置:

//Resize Configs
        $config_r['source_image']  = '----path----' . $tmp['file_name'];
        $config_r['maintain_ratio'] = TRUE;
        $config_r['width']  = 800;
        $config_r['height']    = 800;
        $config_r['quality']   = 100;
        //end of configs

            $this->load->library('image_lib', $config_r); 
            $this->image_lib->initialize($config_r);
            if(!$this->image_lib->resize())
                echo "Failed." . $this->image_lib->display_errors();

缩略图重新调整大小/上传效果很好,只需要想办法做到这两点

【问题讨论】:

  • 你检查目录权限了吗?
  • 两个目录都是777
  • 你检查$config_r['source_image']是否存在你的路径是正确的为什么不直接用这个$tmp['full_path']替换这个'----path----' . $tmp['file_name']
  • 很好的建议,但是我测试了每条路径,它们都是有效的。我得到了缩略图,我只是想不出同时调整大小的方法

标签: php image codeigniter file-upload


【解决方案1】:
$config['upload_path'] = '---path---';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 1024 * 8;
$config['encrypt_name'] = FALSE;

$this->load->library('upload');

$files = $_FILES;
$cpt = count($_FILES['files']['name']);
for($i=0; $i<$cpt; $i++)
{
    $_FILES['files']['name']= $files['files']['name'][$i];
    $_FILES['files']['type']= $files['files']['type'][$i];
    $_FILES['files']['tmp_name']= $files['files']['tmp_name'][$i];
    $_FILES['files']['error']= $files['files']['error'][$i];
    $_FILES['files']['size']= $files['files']['size'][$i];    

    $this->upload->initialize($config);
    $this->upload->do_upload('files');
    $tmp = $this->upload->data();

        $this->load->library('image_lib'); 
        //Thumbnail configs
        $config_t['source_image']   = '---path---' . $tmp['file_name'];
        $config_t['new_image']  = '--path to thumbnail ---' . $tmp['file_name'];
        $config_t['create_thumb'] = FALSE;///change this
        $config_t['maintain_ratio'] = TRUE;
        $config_t['width']   = 110;
        $config_t['height'] = 110;
        //end of configs

            $this->load->library('image_lib', $config_t); 
            $this->image_lib->initialize($config_t);
            if(!$this->image_lib->resize())
                echo "Failed." . $this->image_lib->display_errors();

        //Resize Configs
        $config_r['source_image']   = '----path----' . $tmp['file_name'];
        $config_r['maintain_ratio'] = TRUE;
        $config_t['create_thumb'] = FALSE;///add this
        $config_r['width']   = 800;
        $config_r['height'] = 800;
        $config_r['quality']    = 100;
        //end of configs

            $this->load->library('image_lib', $config_r); 
            $this->image_lib->initialize($config_r);
            if(!$this->image_lib->resize())
                echo "Failed." . $this->image_lib->display_errors();

}

【讨论】:

    【解决方案2】:

    您是否尝试在再次调整缓存大小后清除缓存?

    $this->image_lib->resize()
    $this->image_lib->clear();
    

    只需加载一次库并使用initialize.,然后在每次调整大小后清除它

        $config_t['source_image']   = '---path---' . $tmp['file_name'];
        $config_t['new_image']  = '--path to thumbnail ---' . $tmp['file_name'];
        $config_t['create_thumb'] = TRUE;
        $config_t['maintain_ratio'] = TRUE;
        $config_t['width']   = 110;
        $config_t['height'] = 110;
    
        $config_r['source_image']   = '----path----' . $tmp['file_name'];
        $config_r['maintain_ratio'] = TRUE;
        $config_r['width']   = 800;
        $config_r['height'] = 800;
        $config_r['quality']    = 100;
        //end of configs
    
        //load library once
        $this->load->library('image_lib'); 
    
        //use first config
        $this->image_lib->initialize($config_t);
        //run resize
        if(!$this->image_lib->resize())
        {
          echo "Failed." . $this->image_lib->display_errors();
        }
        //clear
        $this->image_lib->clear();
    
        //initialize second config
        $this->image_lib->initialize($config_r);
        //run resize
        if(!$this->image_lib->resize())
        {
            echo "Failed." . $this->image_lib->display_errors();
        }
        //clear
        $this->image_lib->clear();
    

    【讨论】:

    • 非常感谢,调用 $this->image_lib->clear();成功了
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2013-06-22
    • 1970-01-01
    • 2014-04-09
    • 2012-07-25
    • 2013-06-24
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多