4

画像のサイズを変更してからサムネイルを作成しようとすると問題が発生します。

両方の関数は別々に動作しますが、両方を呼び出そうとすると、最初の呼び出しのみが機能します。Thumb が作成されません。なぜですか?

これが私のコントローラーです:

if($this->upload->do_upload()){

                // Si oui, tout va bien

                //Update DB
                $pictureData = $this->upload->data();
                if($pictureData['file_name']!=''){
                    //On resize l'immage
                        //On charge la librarie
                        $this->load->library('thumbs');

                        $this->thumbs->resize($pictureData['full_path'], 300, 600);

                    $News['image']=$pictureData['file_name'];

                    //On crée un Thumbnail:
                        // on envoi le full path
                        if($this->thumbs->create($pictureData['full_path']))

                        // on stock le path recu
                    $News['thumb'] = $pictureData['raw_name'].'_thumb'.$pictureData['file_ext'];
                }
            }

そして、これが両方の機能用に作成したライブラリです。

   <?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Thumbs
{

    function __construct()
    {
        $CI =& get_instance();
        $this->load->library('image_lib');
    }

    public function create($picPath) {

        $CI =& get_instance();

        $config['image_library'] = 'gd2';
        $config['source_image'] = $picPath;
        $config['maintain_ratio'] = TRUE;
        $config['create_thumb'] = TRUE;
        $config['width']     = 100;
        $config['height']   = 100;

        $CI->image_lib->clear();
        $CI->image_lib->initialize($config); 

        if(!$CI->image_lib->resize()){
            $CI->session->set_flashdata('flashError',  $CI->image_lib->display_errors());
            return False;
        }
        $CI->image_lib->clear();
        Return True;

    }

    public function resize($picPath, $x, $y) {

        $CI =& get_instance();

        $config1['image_library'] = 'gd2';
        $config1['source_image']    = $picPath;
        $config1['maintain_ratio'] = TRUE;

        if($x!=0)
            $config1['width']    = $x;

        if($y!=0)
            $config1['height']  = $y;

        $CI->image_lib->clear();
        $CI->image_lib->initialize($config1); 

        if(!$CI->image_lib->resize()){
            $CI->session->set_flashdata('flashError',  $CI->image_lib->display_errors());
            return False;
        }
        $CI->image_lib->clear();
        Return True;
    }
}

したがって、1 つだけを呼び出すと、それが create または resize 関数であるかどうかに関係なく、正常に動作します。それ以外の場合、両方を呼び出そうとすると、最初に呼び出された関数のみが機能します。

編集: fccotech のおかげで、私はそれを作った。彼が持ってきた解決策は次のとおりです。

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Thumbs
{

    function __construct()
    {
        $this->CI =& get_instance();
        $this->CI->load->library('image_lib');
    }

    public function create($picPath, $picName) {

        $config =array();

        $config['image_library'] = 'gd2';
        $config['source_image'] = $picPath;
        $config['maintain_ratio'] = TRUE;
        $config['create_thumb'] = TRUE;
        $config['width']     = 100;
        $config['height']   = 100;
        $config['new_image'] =  $picName;

        // $CI->image_lib->clear();
        $this->CI->image_lib->initialize($config); 

        if(!$this->CI->image_lib->resize()){
            $this->CI->session->set_flashdata('flashError',  $this->CI->image_lib->display_errors());
            return False;
        }
        $this->CI->image_lib->clear();
        Return True;

    }

    public function resize($picPath, $x, $y) {

        $config1 = Array();

        $config1['image_library'] = 'gd2';
        $config1['source_image']    = $picPath;
        $config1['maintain_ratio'] = TRUE;

        if($x!=0)
            $config1['width']    = $x;

        if($y!=0)
            $config1['height']  = $y;

        // $CI->image_lib->clear();
        $this->CI->image_lib->initialize($config1); 

        if(!$this->CI->image_lib->resize()){
            $this->CI->session->set_flashdata('flashError',  $this->CI->image_lib->display_errors());
            $this->CI->image_lib->clear();
            return False;
        }
        $this->CI->image_lib->clear();
        Return True;
    }
}
4

1 に答える 1

7

リサイズ後追記

$this->image_lib->clear();

新しい $CI->image_lib->initialize($config); を実行する前にもクリアします。

于 2012-10-25T17:07:17.807 に答える