Вывод манипуляции с изображением Codeigniter черный

Я получаю черную область, чтобы справиться с этим с помощью CI, изображение имеет разрешение 950x720.

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

код по сути: 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)


Я думаю, что когда вы вызываете функцию в первый раз, скрипт изменяет само изображение и делает его размером 220 на 200 пикселей. и когда вы вызываете функцию во второй раз, она берет маленькое изображение и изменяет его размер до 450 на 450 пикселей. это может быть ошибка .. попробуйте сохранить первую миниатюру в новый файл назначения. попробуйте код ниже.

<?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() сразу выводит байты изображения в поток, на самом деле. - person Herbert Van-Vliet; 09.10.2020