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
相关产品推荐
相关产品推荐

