Изходът за обработка на изображението на Codeigniter е черен

Получавам черна зона, за да се справя с това с CI, изображението има 950x720

първото преоразмеряване е добре $this->resize($data['upload_data']['full_path'], 220, 200, true, false); но във втория се появява грешката

код на gist: https://gist.github.com/mateuspv/48ba464a557da9bbdf10

ci черна грешка

<?php
/**
 * resize
 * @param  string $path   [description]
 * @param  int $width  [description]
 * @param  int $height [description]
 * @param  boolean $thumb  [description]
 * @param  boolean $ratio  [description]
 */
private function resize($path, $width, $height, $thumb, $ratio) {
        $config['image_library'] = 'GD2';
        $config['source_image'] = $path;
        $config['maintain_ratio'] = $ratio;
        $config['create_thumb'] = $thumb;
        $config['encrypt_name'] = TRUE;
        $config['width'] = $width;
        $config['height'] = $height;
        $this->image_lib->clear();
        $this->image_lib->initialize($config);
        $this->image_lib->resize();
        if (!$this->image_lib->resize()) {
            die($this->image_lib->display_errors());

        }
    }

//...

/**
 * TODO ~
 */
$data = array('upload_data' => $this->upload->data());
$this->resize($data['upload_data']['full_path'], 220, 200, true, false);
$this->resize($data['upload_data']['full_path'], 450, 450, false, false);

person Mateus Vahl    schedule 08.04.2014    source източник


Отговори (1)


Мисля, че когато извикате функция за първи път, скриптът променя самото изображение и го прави 220px на 200px. и когато извикате функция втори път, тя взема малко изображение и го преоразмерява до 450px на 450px. това може да е грешката.. опитайте да запишете първата миниатюра в нов целеви файл. опитайте кода по-долу.

<?php
/**
 * resize
 * @param  string $path   [description]
 * @param  int $width  [description]
 * @param  int $height [description]
 * @param  boolean $thumb  [description]
 * @param  boolean $ratio  [description]
 */
private function resize($path, $width, $height, $thumb, $ratio) {
    $config['image_library'] = 'GD2';
    $config['source_image'] = $path;
    $config['new_image'] = PATH_TO_NEW_IMAGE;
    $config['maintain_ratio'] = $ratio;
    $config['create_thumb'] = $thumb;
    $config['encrypt_name'] = TRUE;
    $config['width'] = $width;
    $config['height'] = $height;
    $this->image_lib->clear();
    $this->image_lib->initialize($config);
    $this->image_lib->resize();
    if (!$this->image_lib->resize()) {
        die($this->image_lib->display_errors());

    }
}

//...

/**
 * TODO ~
 */
$data = array('upload_data' => $this->upload->data());
$this->resize($data['upload_data']['full_path'], 220, 200, true, false);
$this->resize($data['upload_data']['full_path'], 450, 450, false, false);

Променете PATH_TO_NEW_IMAGE на вашия целеви път към файла. Надявам се това да помогне.

person Rahul Kaushik    schedule 08.04.2014
comment
resize() се извиква два пъти тук.. можете да премахнете първия, afaik. - person Herbert Van-Vliet; 08.10.2020
comment
@HerbertVan-Vliet resize() се извиква два пъти, за да създаде две изображения с различни размери. - person Rahul Kaushik; 09.10.2020
comment
Мислех за $this-›image_lib-›resize() във вашата функция за преоразмеряване. Първият може да отиде според мен - тъй като image_lib-›resize() aready извежда байтовете на изображението в потока afaik. - person Herbert Van-Vliet; 09.10.2020