0

尝试使用 Image_moo 和 CodeIgniter 框架生成缩略图。Image_moo 不会输出任何错误,但是永远不会生成缩略图。

目录结构应用程序 - 控制器/Admin.php ... - 库/ Image_moo.php ... - 模型/ Admin_photos_model.php

管理员.php

public function photo_upload() {

            $rules = [
                [
                    'field' => 'caption',
                    'label' => 'Caption'//,
                    //'rules' => 'required'
                ],[
                    'field' => 'description',
                    'label' => 'Description'//,
                    //'rules' => 'required'
                ],[
                    'field' => 'series',
                    'label' => 'Series',
                    'rules' => 'required'
                ]
            ];

            $this->form_validation->set_rules($rules);

            if ($this->form_validation->run() == FALSE) {
                $this->load->view('admin/photos/upload');
            } else {
                $series = str_replace(' ', '', strtolower($_POST['series']));
                $upload_path = './img/photos/'.$series.'/';                        

                $config = [
                    'upload_path'   => $upload_path, //'./img/photos/'.$series.'/',
                    'allowed_types' => 'gif|jpg|jpeg|png'
                ];

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

                if (!file_exists($upload_path)) { //check if series dir exists
                    mkdir($upload_path, 0777, true); // create dir if !exist
                    $num = 1; //init
                } else {
                    $num = $this->db->where('series', $series)->count_all_results('photos') + 1;
                };

                if (!$this->upload->do_upload()) {
                    $error = array('error' => $this->upload->display_errors());
                    $this->load->view('admin/photos/upload', $error);
                } else {
                    $file = $this->upload->data();    
                    $caption = $_POST['caption'];
                    $description = $_POST['description'];

                    $data = [
                        'filename'      => $file['file_name'],
                        'series'        => $series,
                        'num'           => $num,
                        'caption'       => $caption,
                        'description'   => $description
                    ];

                    $this->Admin_photos_model->upload($data);

                    $this->load->library('image_moo'); //create thumbnail, upload

                    $file_raw_name = $this->upload->data('raw_name');
                    $file_ext = $this->upload->data('file_ext');
                    $file_width = $this->upload->data('image_width');
                    $file_height = $this->upload->data('image_height');
                    $file_uploaded = $upload_path.$data['filename']; //$field_info->upload_path.'/'.$uploader_response[0]->name; 

                    if ($file_width > 1024 && $file_height > 720) {
                        $this->image_moo->load($file_uploaded)
                        ->resize_crop(1024,720)->save($upload_path.$file_raw_name.'_thumb_xl'.$file_ext)
                        ->resize_crop(800,562)->save($upload_path.$file_raw_name.'_thumb_lg'.$file_ext)
                        ->resize_crop(640,450)->save($upload_path.$file_raw_name.'_thumb_med'.$file_ext)
                        ->resize_crop(450,316)->save($upload_path.$file_raw_name.'_thumb_sm'.$file_ext)
                        ->resize_crop(222,156)->save($upload_path.$file_raw_name.'_thumb_xs'.$file_ext);

                        $data = [
                            'has_thumb_xl'          => 1,
                            'has_thumb_lg'          => 1,
                            'has_thumb_med'         => 1,
                            'has_thumb_sm'          => 1,
                            'has_thumb_xs'          => 1,
                            'thumb_xl_filename'     => $file_raw_name.'_thumb_xl'.$file_ext,
                            'thumb_lg_filename'     => $file_raw_name.'_thumb_lg'.$file_ext,
                            'thumb_med_filename'    => $file_raw_name.'_thumb_med'.$file_ext,
                            'thumb_sm_filename'     => $file_raw_name.'_thumb_sm'.$file_ext,
                            'thumb_xs_filename'     => $file_raw_name.'_thumb_xs'.$file_ext
                        ];
                    };

                    if ($this->image_moo->error) {
                        print $this->image_moo->display_errors();
                    };

                    $this->Admin_photos_model->thumbnails($data);

                    $this->session->set_flashdata('message','file uploaded: '.$file_uploaded.'New image has been added..'.'series dir: '.$series.'last num of series: '.$num.'thumb:'.$file_raw_name.'_thumb_xl'.$file_ext.'errors: '.$this->image_moo->display_errors());
                    redirect('admin/photos');
                };

Admin_photos_model

<?php
    class Admin_photos_model extends CI_Model {
        public function __construct(){
            $this->load->database();
        }
        public function upload($data) {
            try {
                $this->db->insert('photos', $data);
                return true;
           } catch (Exception $e) {
                echo $e->getMessage();
           };
        }
        public function thumbnails($data) {
            try {
                $this->db->insert('photos', $data);
                return true;
            } catch (Exception $e) {
                echo $e->getMessage();
           };
        }
    }

尝试生成缩略图,我按系列分隔照片。如果该系列尚未开始,则会创建一个新目录。理想情况下,上传带有“nature”系列的“waterfall.jpg”会产生:

app
...
public_html/
    img/
        photos/
            nature/
                waterfall.jpg
                waterfall_thumb_xl.jpg
                waterfall_thumb_lg.jpg
                waterfall_thumb_med.jpg
                waterfall_thumb_sm.jpg
                waterfall_thumb_xs.jpg

任何帮助,将不胜感激。

4

1 回答 1

1

阅读 image_moo 文档,保存函数需要有一个 overwrite=FALSE/TRUE。这样做似乎可以解决它。

"save($x,$overwrite=FALSE) - 将处理后的图像(如果适用)保存到文件 $x - 支持 JPG、PNG、GIF。如果未设置覆盖,文件写入可能会失败。保存的文件将取决于处理对图像进行了处理,或者如果什么都没做,则为一个简单的副本。”

于 2018-01-12T19:26:12.963 回答