首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

CodeIgniter 文件上傳與圖像處理實戰:原圖存儲、多尺寸縮略圖自動生成

     編輯:PHP 相關知識

完整業務流程

  1. 配置上傳路徑(按日期分目錄)與允許類型/大小
  2. 執行上傳,獲取文件信息
  3. 載入 image_lib,分別配置大/小縮略圖參數
  4. 調用 resize() 生成縮略圖
  5. 入庫記錄原圖路徑、分類、鏈接等信息

核心控制器代碼

public function edit_list_page_banner($category_id = '') {
    $category_id = $category_id ?: $_POST['category_id'];
    if (isset($_POST['key']) && $_POST['key'] === 'upload') {
        // 1. 動態創建日期目錄
        $date_dir = date('Y/m/d');
        foreach (['source', 'big_thumb', 'small_thumb'] as $dir) {
            $path = "./upload/{$dir}/{$date_dir}";
            if (!file_exists($path)) mkdir($path, 0777, true);
        }
        // 2. 上傳配置
        $config = [
            'upload_path' => "./upload/source/{$date_dir}",
            'allowed_types' => 'gif|jpg|png',
            'max_size' => 20480,
        ];
        $this->load->library('upload', $config);
        if ($this->upload->do_upload('userfile')) {
            $data = $this->upload->data();
            $this->load->library('image_lib');
            // 3. 大縮略圖 (300x300)
            $big_cfg = $this->config->item('config_big_thumb');
            $big_cfg['source_image'] = $data['full_path'];
            $big_cfg['new_image'] = "./upload/big_thumb/{$date_dir}/{$data['file_name']}";
            $this->image_lib->initialize($big_cfg);
            $this->image_lib->resize();
            // 4. 小縮略圖 (100x100)
            $small_cfg = [
                'image_library' => 'gd2',
                'source_image' => $data['full_path'],
                'new_image' => "./upload/small_thumb/{$date_dir}/{$data['file_name']}",
                'create_thumb' => true,
                'maintain_ratio' => true,
                'width' => 100, 'height' => 100,
                'thumb_marker' => '_100_100',
            ];
            $this->image_lib->initialize($small_cfg);
            $this->image_lib->resize();
            // 5. 入庫
            $this->category_model->add_category_banner([
                'category_id' => $category_id,
                'pic_url' => "./upload/source/{$date_dir}/{$data['file_name']}",
                'addtime' => time(),
                'gender' => $_POST['gender'],
                'link_url' => $_POST['link_url'],
                'user_id' => $this->cur_user['user_id'],
            ]);
        }
    }
    // 列表渲染...
}

配置文件 config.php 中的縮略圖預設

$config['config_big_thumb'] = [
    'image_library' => 'gd2',
    'create_thumb' => true,
    'maintain_ratio' => true,
    'width' => 300, 'height' => 300,
    'thumb_marker' => '_300_300',
];

關鍵點提示

  • initialize() 必須在每次 resize() 前調用以重置配置
  • maintain_ratio = true 保持原圖比例,寬高為最大限制
  • 目錄權限 0777 確保寫入成功,生產環境建議收緊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved