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