Как я могу дополнить изображение с помощью CodeIgniter?



Мой пользователь загружает изображение любого размера XX x YY. Я хочу найти больший размер и сжать изображение до квадрата 250x250 с прозрачной прокладкой, добавленной, чтобы компенсировать разницу. Есть ли какой-нибудь способ сделать это с помощью имиджевой библиотеки CI?

500   2  

2 ответов:

Попробуйте это:

$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['maintain_ratio'] = TRUE;
$config['width'] = 250;
$config['height'] = 250;

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

$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['maintain_ratio'] = FALSE;
$config['width'] = 250;
$config['height'] = 250;

$this->image_lib->initialize($config);
$this->image_lib->crop();

Подробнее см. Класс обработки изображений из API CodeIgniter

Хотя если быть совсем честным, я не могу найти библиотеки для работы с изображениями ИЦ должен быть адекватным. Он не очень гибок, он не очень быстр для повторных или комбинированных действий (как выше), и он использует ужасный синтаксис (который может пригодиться для некоторых типов приложений, но лично я предпочитаю что-то вроде PHP Thumb):


Фактически, я недавно собрал простую библиотеку-оболочку для PHP Thumb (Скачать) для использования с CodeIgniter, и она работает сказочно. Используя библиотеку PHP Thumb вместо собственной CodeIgniter, вы можете выполнить эту работу следующим образом:

$this->load->library('phpthumb_lib');
$thumb = phpthumb_lib::create('/path/to/image/mypic.jpg');
$thumb->adaptiveResize(250, 250);
$thumb->save();

Подробнее на странице GitHubPHP Thumb .

Только это не заполняет изображение прозрачными пикселями (что я бы счел плохой практикой), это просто изменяет размер и обрезает изображение, чтобы соответствовать всей области 250x250 пикселей без растяжения изображение.

В качестве альтернативы, вы можете изменить размер изображения, чтобыпоместилось внутри пиксельной коробки 250x250 (с помощью resize, а не adaptiveResize), а затем поместить изображения в контейнеры 250X250PX DIV. Я предполагаю, что это, вероятно, решение, которое вы захотите.

Я не обрезаю изображение, а помещаю его на заднем плане div. Вот мой код.

1) внутри помощника поместите это.

function getSmallerDimension($img_path, $width, $height) {
    list($wid, $hei, $type, $attr)= getimagesize($img_path);
    $ratio = $wid / $hei;

    if( $height < $width/$ratio ) {
        return 'width';
    }
    else if( $width < $height * $ratio ) {
        return 'height';
    }
    else {
        return 'auto';
    }
}

2) Используйте это для изменения размера.

$config['image_library'] = 'gd2';
$config['source_image'] = 'source-path/source.jpg';
$config['create_thumb'] = true;
$config['thumb_marker'] = '-thumb';
$config['maintain_ratio'] = true;
$config['width'] = 250;
$config['height'] = 250;
$config['master_dim'] = getSmallerDimension('source-path/source.jpg', 250, 250);
$this->load->library('image_lib', $config);
$this->image_lib->resize();

Comments

    Ничего не найдено.