You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter上传图片设置质量60%宽度100px未生效问题求解

Codeigniter图片上传不压缩问题解决方案

核心错误原因

  • 执行顺序颠倒:你在文件还未完成上传时就调用了image_lib->resize(),此时服务器上不存在待处理的源文件,压缩调整操作直接失效
  • 配置混用:上传类upload和图像处理类image_lib的配置参数不通用,你直接把上传配置传给了图像处理类,缺少图像处理必须的源文件路径等参数
  • 关键参数缺失:图像处理需要的宽高比控制、主维度等参数未配置,也会导致调整不生效

修复后完整代码

function save_order()
{
    $data = $this->input->post(array('order_id', 'order_type', 'customer_id', 'order_total', 'payment_received', 'bill_no', 'pickup_date', 'delivery_date', 'pickups', 'designer', 'balance', 'remark', 'bill_img'));
    $measur1 = "";
    if($_FILES["bill_img"]["name"])
    {
        $ext = pathinfo($_FILES['bill_img']['name'], PATHINFO_EXTENSION);
        $filename_without_extension=explode('.'.$ext,$_FILES['bill_img']['name']);
        $filename1=str_replace(' ','_',$filename_without_extension[0]);
        $final_filename=str_replace('.','_',$filename1);
        $filename=$final_filename.'.'.$ext;
        $folder_name=$data['order_id'];
        $upload_path = './uploads/order/'.$folder_name;
        if (!is_dir($upload_path))
        {
            mkdir($upload_path, 0777, TRUE);
        }
        // 上传类配置
        $upload_config['upload_path'] = $upload_path;
        $upload_config['allowed_types'] = 'jpg|jpeg|png';
        $upload_config['file_name'] = $filename;
        $this->load->library('upload', $upload_config);  
       
        if($this->upload->do_upload('bill_img'))
        {
            // 上传成功后获取上传文件信息
            $upload_data = $this->upload->data();
            // 图像处理类配置
            $image_config['image_library'] = 'gd2';
            $image_config['source_image'] = $upload_data['full_path'];
            $image_config['maintain_ratio'] = TRUE;
            $image_config['width'] = 100;
            $image_config['master_dim'] = 'width'; // 以宽度为基准自动计算高度
            $image_config['quality'] = '60%';
            $this->load->library('image_lib', $image_config);
            $this->image_lib->initialize($image_config);
            // 执行压缩调整
            if (!$this->image_lib->resize())
            {
                // 调试时可打开下面的打印查看错误
                // echo $this->image_lib->display_errors();
            }
            $this->image_lib->clear();
            $measur1 = 'uploads/order/'.$folder_name.'/'.$filename;
        }
    }

    $insert_data = array(
        'order_type' => $data['order_type'], 
        'customer' => $data['customer_id'], 
        'pickups' => $data['pickups'],
        'bill_no' => $data['bill_no'], 
        'pickup_date' => $data['pickup_date'], 
        'delivery_date' => $data['delivery_date'],
        'designer' => $data['designer'], 
        'total_amt' => $data['order_total'] + $data['pickups'], 
        'received_amt' => $data['payment_received'], 
        'remaining_amt' => $data['balance'], 
        'remark' => $data['remark'], 
        'bill_img' => $measur1, 
        'created_at' => DATE
    );
    $result = $this->common_model->insert_data('tbl_orders',$insert_data);
    if($result)
    {
        $this->session->set_flashdata('success', 'Order Put Successfully.');
    }
    else{
        $this->session->set_flashdata('error','Opps.!!, Error While Putting Order.');
    }
    redirect('manage-orders');
}

关键修改说明

  • 调整执行逻辑:先完成文件上传,再对已上传的文件执行压缩调整,保证resize操作有可处理的源文件
  • 拆分两类配置:独立配置上传类和图像处理类的参数,避免配置混用导致失效
  • 补充图像处理必要参数:新增maintain_ratio保持宽高比避免图片变形,master_dim指定以宽度为调整基准,自动计算对应高度
  • 增加容错逻辑:新增图像处理失败的错误捕获入口,方便后续调试定位问题

内容的提问来源于stack exchange,提问作者chetan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:45:04