Тема: 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 - ширина, высота, обрезаем или нет