Урок 8 — Класс Image Manipulation. Создание миниатюр и водного знака

Двигаемся дальше и в этом уроке разберем работу с классом Image Manipulation.Рассмотрим как создавать миниатюры для загруженных изображений и как наносить на них водный знак.

Выставляйте качество 480р.

Если Вы хотите выучить весь фреймворк CodeIgniter и создавать мощные и функциональные сайты — Вам сюда.

В прошлом уроке мы загружали файлы на сервер. Если Вы не проходили данный урок, то советую пройти.

Создание миниатюр.

Для начала нам нужно создать отдельную папку, в которую будем сохранять наши миниатюры. У меня это будет папка img/photos/thumbs. Будем работать в контроллере прошлого урока по загрузке файлов на сервер — это контроллер first и функция upload_photo.

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

Контроллер:

...
...
$this->db->insert('photos',$add); // заносим это значение в таблицу photos
/*Конец прошлого урока*/

$config['image_library'] = 'gd2'; // указываем библиотеку для обработки изображения
$config['source_image']	= $upload_data['full_path']; // указываем полный путь к загруженному изображению, которое будем уменьшать
$config['new_image']	= APPPATH.'../img/photos/thumbs'; // указываем куда сохранять миниатюру
$config['maintain_ratio'] = TRUE; // сохранение пропорций
$config['width'] = 80; // ширина миниатюры
$config['height'] = 80; // высота миниатюры

$this->load->library('image_lib', $config);  // загружаем библиотеку с настройками

$this->image_lib->resize();  // вызываем функцию уменьшения изображения

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

Что такое APPPATH — я не вникал, честно. Но где то вычитал что там надо так указывать, и по-моему без этой строки миниатюра не сохранится в указанную папку. Так что пишите :)
Список всех настроек можете посмотреть тут.

Ну вот и все. Легко и быстро :)
Попробуйте загрузить изображение и проверьте — создалась ли миниатюра.
Если да, то двигаемся дальше.

Наложение водного знака.

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

Контроллер (после создания миниатюры):

...
...
$this->image_lib->resize();  // вызываем функцию уменьшения изображения
/*Конец создания миниатюры*/

$config['source_image']	= $upload_data['full_path']; // указываем путь к загруженному изображению
$config['new_image']	= APPPATH.'../img/photos/wm'; // указываем куда сохранять изображение с ВМ
$config['wm_text'] = 'Copyright 2012 - Dmitry Valak'; // текст ВМ, который появится на изображении
$config['wm_type'] = 'text'; // тип ВМ
$config['wm_font_path'] = './system/fonts/texb.ttf'; // шрифт, которым будет написан ВМ
$config['wm_font_size']	= '16'; // размер шрифта
$config['wm_font_color'] = 'ffffff'; // цвет шрифта
$config['wm_vrt_alignment'] = 'bottom'; // вертикальное выравнивание ВМ
$config['wm_hor_alignment'] = 'center'; // горизонтальное выравнивание ВМ
$config['wm_padding'] = '20';  // внутренний отступ ВМ от границ изображения

$this->image_lib->initialize($config); // инициализируем настройки

$this->image_lib->watermark(); // создаем изображение с ВМ

Путь к загруженному файлу берем опять же из массива с информацией о файле. Шрифты находятся в папке system->fonts, там этот шрифт texb.ttf есть по умолчанию. Можете туда сохранить свои какие-нибудь другие шрифты и использовать их. И не забудьте создать новую папку для изображения с ВМ (у меня это папка wm), если конечно хотите.

Можете проверить. Если работает, то я Вас поздравляю :)

Поэксперементируйте с настройками, не бойтесь. Можете посмотреть полный список возможных настроек тут почти в самом низу.

Если урок Вам был полезен, нажмите на любую кнопку ниже— буду благодарен :) Всем удачи и следите за ходом событий ;)

Комменты

  • У меня вопрос. Как заносить в базу имя миниатюры?

  • APPPATH — это адрес папки application

  • Привет, Дмитрий. Я, наверно, запоздала с комментариями, но вот, что-то у меня никак не получается создать миниатюру и наложить водный знак. Не подскажите, может уже есть какое-то решение?

  • помогите реализовать функцию unlink

    • Дмитрий Валак: 04-04-2013 в 10:11

      Сергей, в codeigniter есть хороший хэлпер, называется — file_helper, там есть функция которая удаляет все файлы в указанной папке. delete_files(‘path’);

  • Уже пробовал.нужно как то вызвать одновременно две функции на обрезку и на вод знак

    $config[‘image_library’] = ‘gd2′;
    $config[‘source_image’] = $image_data[‘full_path’];
    $config[‘new_image’] = APPPATH.’../img/photos/wm';
    $config[‘wm_overlay_path’] = APPPATH.’../img/watermark.png';
    $config[‘wm_type’] = ‘overlay';
    $config[‘wm_font_size’] = ’16’
    $config[‘wm_vrt_alignment’] = ‘middle';
    $config[‘wm_hor_alignment’] = ‘center';
    $config[‘wm_padding’] = ‘1’;
    $config[‘create_thumb’] = TRUE;
    $config[‘maintain_ratio’] = TRUE;
    $config[‘width’] = 280;
    $config[‘height’] = 280;

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

    $this->image_lib->resize();

    $this->image_lib->watermark();

    примерно что то такое, сейчас оно накладывает ватермарк,когда местами меняешь в низу resize будет обрезать.

  • Здравствуйте.
    у меня такой вопрос,как сделать чтоб загружался один файл но уже обрезанный и с водяным знаком а то очень много места надо на сервере.

    • Дмитрий Валак: 28-03-2013 в 8:33

      Здравствуйте. Честно говоря, я не пробовал, потому пока ответить не могу. Но в голову приходит такая идея. Сохранять уменьшенные изображения в отдельную папку, а оригинал сразу удалять. Можете попробовать воспользоваться функцией unlink(«путь к файлу»);