Codeigniter Image Manipulation Class: изменение размера и обрезка нескольких файлов - PullRequest
1 голос
/ 26 января 2012

Я изо всех сил пытаюсь заставить Манипуляции Изображения CodeIgniter работать правильно.Либо это ошибка, либо я просто не вижу ее.Я надеюсь, что кто-то может помочь мне с этим.Заранее спасибо!

По сценарию: Я хочу создать миниатюры (176 Вт х 132 ч).Входные изображения имеют разные размеры и соотношения.Чтобы всегда получать этот размер, я сначала изменяю их размер, чтобы соответствовать максимальной ширине или высоте (в зависимости от ориентации изображения), а затем обрезаю по центру.Я пытался сделать все это в 1 методе.Это не сработало, поэтому я создал два отдельных метода:

resize_img() 

и

crop_img().

Когда я запускаю resize_img () для 3 разных файлов, это работает.Если после этого я использую crop_img () на этих эскизах, 1-й метод создан, он работает.Если я объединю два или использую их один за другим, это не так.Я попытался $ this-> image_lib-> clear (); сбросив файлы конфигурации.Я даже создал два файла конфигурации, просто чтобы быть уверенным.

Я получаю различные ошибки от GD2, но проблема в том, что после того, как resize_img () создает миниатюру, crop_img () выигралобрезать его.После этого все идет на юг, и следующие изображения не могут быть открыты.Права записи проверяются как для папки, так и для файлов.

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

Полный код:

<?PHP

class Imagetest extends MY_Controller {

function __construct()
{
    parent::__construct();
    $this->load->library('image_lib');
}

function index()
{
    $testimg1 = 'uploads/test/1.png';
    $testimg2 = 'uploads/test/2.png';
    $testimg3 = 'uploads/test/3.png';

    $this->resize_img($testimg1);
    $this->crop_img($testimg1);

    $this->resize_img($testimg2);
    $this->crop_img($testimg2);

    $this->resize_img($testimg3);
    $this->crop_img($testimg3);
}


function image_thumb_name($img = null)
{
    if(!empty($img)) {
        $exploded = explode('.', $img);
        return $exploded['0'] . '_thumb.' . $exploded['1'];
    }
}

function get_axis($img)
{
    // Default values
    $output['x_axis'] = 0;
    $output['y_axis'] = 0;

    // Settings
    $config['height'] = 132;
    $config['width']  = 176;

    if ($img_dim = getimagesize($img)) {
        list($thumb_width, $thumb_height) = $img_dim;
    } else {
        echo '<h1> ERROR HERE TOO</h1>';
        return false;
    }

    if ($thumb_width > $config['width']) {

        $output['x_axis'] = (($thumb_width - $config['width']) / 2) ;               

    } else if ($thumb_height > $config['height']) {

        $output['y_axis'] = (($thumb_height - $config['height']) / 2);
    }       
    return $output;
} 

function resize_img($img) 
{
    $config = array();
    echo 'Processing: '. $img .'<br/>';  // Debug

    if ($img_dim = getimagesize($img)) {
        list($image_width, $image_height) = $img_dim;
    } else {
        echo '<h1> ERROR HERE </h1>';
    }

    // create a thumbnail
    $config['image_library'] = 'GD2';
    $config['source_image'] = $img;
    $config['quality'] = 100;
    $config['height'] = 132;
    $config['width'] = 176;
    $config['create_thumb']  = TRUE;
    $config['maintain_ratio']= TRUE;
    $config['master_dim'] = ($image_width > $image_height) ? 'height' : 'width';
    $this->image_lib->initialize($config);

    if (!$this->image_lib->resize()) { 
        echo $this->image_lib->display_errors();
    }

    echo '<img src="../'.$this->image_thumb_name($img).'" /> <br/>'; // Debug

    $this->image_lib->clear();
    unset($config);
}   




function crop_img($img)
{
    $config2 = array();

    // Crop that thumbnail
    $config2['image_library'] = 'GD2';
    $config2['quality'] = 100;
    $config2['height'] = 132;
    $config2['width'] = 176;
    $config2['source_image']  = $this->image_thumb_name($img);
    $axis = $this->get_axis($config2['source_image']);
    $config2['x_axis'] = $axis['x_axis'];
    $config2['y_axis'] = $axis['y_axis'];
    $config2['maintain_ratio'] = FALSE;
    $config2['create_thumb'] = FALSE;
    $this->image_lib->initialize($config2);

    if (!$this->image_lib->crop()) { 
        echo $this->image_lib->display_errors(); 
    }

    echo '<img src="../'.$config2['source_image'].'" /> <br/>'; // Debug

    $this->image_lib->clear();
    unset($config2);
}

}

Ответы [ 2 ]

1 голос
/ 28 января 2012

Понял!Я установил для опции create_thumb значение FALSE и использовал параметр new_image в методе resize_img.Эффект тот же, но встроенная функция create_tumb не используется.Это ошибка ИМХО, но она работает сейчас:)

$config['create_thumb'] = FALSE;
$config['new_image'] = $this->image_thumb_name($img);
0 голосов
/ 26 января 2012

Проблема с вашим $ config ['source_image']

var_dump($config['source_image']);

посмотрите, что вы получите.

Если файл находится в папке images в корневой папке, $ config ['source_image] =' images /'.$ img.

Также убедитесь, что все взрывающиеся функции возвращают правильное имя файла.(возврат и эхо, чтобы проверить).

1-й, устранить ошибку "файл не найден".После этого посмотрим какая ошибка придет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...