Создание сайтов. Веб Студия «sOn»

Категории
Информация

Водяной знак на изображения товаров в Opencart (Ocstore)

Автор admin 24.06.2017 0 Комментарии

 

Функция для создания водяного знака (watermark) в opencart заложена разработчиками, однако вывод водяных знаков не реализован.

 

Реализуем вывод водянных знаков самостоятельно.

 

1. Файл — /system/library/image.php

 

Находим строки:

public function watermark($file, $position = 'bottomright') {
    $watermark = $this->create($file);

Заменим

$watermark = $this->create($file);

На

$watermark = imagecreatefrompng($file);

Находим строку:

imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);

Заменим на

imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);

 

2. Находим файл модели — /catalog/model/tool/image.php

 

В файле находим функцию, которая отвечает за изменение размеров изображений

public function resize($filename, $width, $height, $type = "") {

И расширяем её возможности:
добавим в описание функции параметр определяющий накладывать водяной знак $watermark = TRUE или нет $watermark = FALSE.

public function resize($filename, $width, $height, $type = "", $watermark = TRUE) {

Далее ищем строку изменения размеров изображения

$image->resize($width, $height, $type);

и добавляем после нее код:

if ($watermark) {
        $image->watermark(DIR_IMAGE . 'watermark.png', 'bottomright');
}

 

3. Файл изображения водяного знака с именем watermark.png необходимо залить в папку /image

При такой реализации водяной знак будет наложен на ВСЕ изображения магазина.

 

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

$image->resize($width, $height, $type);

нужно добавить вот такой код:

if ($watermark) {
    if ($width > 100 || $height > 100) {
        $image->watermark(DIR_IMAGE . 'watermark.png', 'bottomright');
    }
}

в котором параметры

$width > 100 || $height > 100

определяют размер маленьких картинок, на которые водяной знак накладываться не будет.

 

Если вам параллельно понадобится реализовать ресайз - обрезку картинок по высоте и ширине, чтобы избавить изображения товаров от белых полосок, возникающих при масштабировании превьюшек, когда  исходное изображение непропорционально миниатюре, то в файле модели — /catalog/model/tool/image.php - весь этот код:

if ($width_orig != $width || $height_orig != $height) {
    $image = new Image(DIR_IMAGE . $old_image);
    $image->resize($width, $height, $type);
    $image->save(DIR_IMAGE . $new_image);
} else {
    copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
}

замените на вот этот:

if ($width_orig != $width || $height_orig != $height) {
    $image = new Image(DIR_IMAGE . $old_image);
    if ($width/$height == $width_orig/$height_orig) {
    $image->resize($width, $height, 'w');
    } elseif ($width/$height > $width_orig/$height_orig) {
    $image->resize($width, $height, 'w');
    } elseif ($width/$height < $width_orig/$height_orig) {
    $image->resize($width, $height, 'h');
    }
    if ($watermark) {
    if ($width > 100 || $height > 100) {
    $image->watermark(DIR_IMAGE . 'watermark.png', 'bottomright');
    }//if
    }
    $image->save(DIR_IMAGE . $new_image);
} else {
    copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
}

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

 

Позиционирование водяного знака, возможные значения:

bottomright, bottomleft, topright, topleft

 

Успехов вам!

Комментарий