1

Тема: crop / ресайз изображений

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

И так, делаем по шагам:

1. Ищем файл function.php в вашем шаблоне. например - "\templates\pulse\function.php"
2. Вставляем туда эту функцию.

function thumb($fullname, $width, $height, $crop = 0) {

    // Path to image thumbnail in your root
    $dir = './uploads/thumbs/';
    $url = base_url() . 'uploads/thumbs/';

    // Get the CodeIgniter super object
    $CI = &get_instance();

    // get src file's extension and file name
    $extension = pathinfo($fullname, PATHINFO_EXTENSION) ?: 'jpg';
    $filename = pathinfo($fullname, PATHINFO_FILENAME);
    $image_origin = '.'. $fullname;
    $image_thumb = $dir . $filename .'-'. $height .'x'. $width .'-'. substr(md5($fullname), 0, 5) .'.'. $extension;
    $image_returned = $url . $filename .'-'. $height .'x'. $width .'-'. substr(md5($fullname), 0, 5) .'.'. $extension;

    if (!file_exists($image_thumb)) {

        // LOAD LIBRARY
        $CI->load->library('image_lib');

        // CONFIGURE IMAGE LIBRARY
        $config = [];
        $config['source_image'] = $image_origin;
        $config['create_thumb'] = FALSE;
        $config['new_image'] = $image_thumb;
        $config['width'] = $width;
        $config['height'] = $height;
        $config['quality'] = '70%';

        if($crop) {
            // Получаем размеры сторон изображения
            if (function_exists('getimagesize')) {
                $image = @getimagesize($fullname);
                $size = [
                    'width'  => $image[0],
                    'height' => $image[1],
                ];
            } else {
                return false;
            }

            $size['width'] >= $size['height'] ? $config['master_dim'] = 'height' : $config['master_dim'] = 'width'; // Задаем master_dim

            $CI->image_lib->clear();
            $CI->image_lib->initialize($config);
            $CI->image_lib->resize();

            $config['source_image'] = $image_thumb;
            $config['new_image'] = $image_thumb;
            $config['maintain_ratio'] = FALSE;

            $CI->image_lib->clear();
            $CI->image_lib->initialize($config);
            $CI->image_lib->crop();
        } else {
            $CI->image_lib->initialize($config);
            $CI->image_lib->resize();
            $CI->image_lib->clear();
        }

    }

    return $image_returned;
}

3. в нужном месте шаблона, где выводится изображение, пишите
{thumb(trim($item.field_images), 200, 200, 1)}
где: $item.field_images - путь к изображению. В данном случае выводится через конструктор полей.
200, 200, 1 - ширина, высота, обрезаем или нет

Разработка продающих сайтов. Портфолио тут - pulse.studio. Скайп - absorberex

2

Re: crop / ресайз изображений

Здесь уже был пост, где реализовали кроп через энтропию. http://forum.imagecms.net/viewtopic.php … 169#p27169
Почитать можно здесь - https://habrahabr.ru/company/io/blog/259997/

Профессиональное создание сайтов любой сложности, аудит, продвижение, а также поддержка вашего интернет ресурса - web2life.ru

TIMEWEB > Всегда больше, чем просто хостинг для ImageCMS!