Помощь Водяной знак на картинке товара

Регист
24 Дек 2016
Сообщения
64
Симпатии
10
#1
Подскажите пож. как и где указать размещение водяного знака на картинке товара.А то как то получается он стоит по середине и перкрывает пол картинки.
 

Вложения

MRX

Администратор
Регист
6 Апр 2016
Сообщения
994
Симпатии
642
#2
Думаю в style.cc ищите класс .watermark-img и с ним уже играйтесь.
И вотермарки желательно делать в расширении .png так как тут присутствует прозрачность (у вас на скриншоте ее нет)
 
Регист
24 Дек 2016
Сообщения
64
Симпатии
10
#3
ерунда какая то у меня получается. Не нашёл я .watermark-img. И почему то не загружается новый watermark.Проверяеш по ftp, вроде да,поменялась картинка, в админке показывается старая. кеш почистил-тоже самое. Вроде как с другого места её подтягивает.
 

MRX

Администратор
Регист
6 Апр 2016
Сообщения
994
Симпатии
642
#4
Папка mg-admin => design => css
upload_2017-2-23_12-59-16.png
И почему то не загружается новый watermark.Проверяеш по ftp, вроде да,поменялась картинка, в админке показывается старая.
А вы по фтп загружаете или через админку? Какая версия пхп у вас на хостинге?
 
Регист
24 Дек 2016
Сообщения
64
Симпатии
10
#5
версия пхп 5.3.10. Загружал картинки по разному. Странно как то. При редактировании товара, ватемарк поменялся на новый.Но в админке показывается старый.а вот в программировании конечно я слаб. Может кто поможет опустить ватемарк вниз до конца.
 
Регист
9 Фев 2017
Сообщения
42
Симпатии
30
#6
Я делал проще. Все картинки у меня на сайте фиксированного размера 500х500 пикселей. Соответственно я создал полупрозрачный png размера 500х500 и выставил положение как мне надо. Могута размещает ватермарк в центре фотки, соответственно границы совпадают и ватермарк всегда где мне надо.

Изображения в админке не сбрасываются это проблема кэша, почему-то могута сбрасывает кэш только публичной части и вообще сброс кэша порой работает некорректно. Надо либо забить, либо использовать для проверки чистый браузер (приватный режим например).
 
Регист
9 Фев 2017
Сообщения
42
Симпатии
30
#7
Нашел. Положение и размеры ватермарка задаются в файле /mg-core/lib/upload.php в функции "addWatterMark".
Примерно эти строки:
PHP:
    // помещаем водяной знак на изображение
    $dest_x = (($size[0]) / 2) - (($watermark_width) / 2);
    $dest_y = (($size[1]) / 2) - (($watermark_height) / 2);
 
Регист
9 Фев 2017
Сообщения
42
Симпатии
30
#8
Раз уж пошла такая пьянка, то вот как я переписал эту функцию чтобы она поддерживала не только перемещение, но и масштабирование ватермарка.
PHP:
  /**
   * Добавляет водяной знак к картинке.
   * @param type $image - путь до картинки на сервере
   * @return boolean
   */
  public function addWatterMark($image) {
    $filename = $image;
    if (!file_exists('uploads/watermark/watermark.png')) {
      return false;
    }
    $size_format = getimagesize($image);
    $format = strtolower(substr($size_format['mime'], strpos($size_format['mime'], '/') + 1));

    // создаём водяной знак
    $watermark = imagecreatefrompng('uploads/watermark/watermark.png');
    imagealphablending($watermark, false);
    imageSaveAlpha($watermark, true);
    // получаем значения высоты и ширины водяного знака
    $watermark_width = imagesx($watermark);
    $watermark_height = imagesy($watermark);

    // создаём jpg из оригинального изображения
    $image_path = $image;



    switch ($format) {
      case 'png':
        $image = imagecreatefrompng($image_path);
        $w = imagesx($image);
        $h = imagesy($image);
        $imageTrans = imagecreatetruecolor($w, $h);
        imagealphablending($imageTrans, false);
        imageSaveAlpha($imageTrans, true);


        $col = imagecolorallocate($imageTrans, 0, 0, 0);
        imagefilledrectangle($imageTrans, 0, 0, $w, $h, $col);
        imagealphablending($imageTrans, true);


        break;
      case 'gif':
        $image = imagecreatefromgif($image_path);
        break;
      default:
        $image = imagecreatefromjpeg($image_path);
    }

    //если что-то пойдёт не так
    if ($image === false) {
      return false;
    }
    $size = getimagesize($image_path);

    // Задаем размер ватермарка относительно размера картинки
    // ! возможно ошибка, ватермарк будет вылазить за границы очень длинных и узких картинок !
    if ($size[0] >= $size[1]) { // если ширина больше, то считаем относительно нее
      $watermark_width_real = $size[0] * 0.28;
      $watermark_height_real = $watermark_width_real / $watermark_width * $watermark_height;
    }else{    // Иначе относительно высоты
      $watermark_height_real = $size[1] * 0.07;
      $watermark_width_real = $watermark_height_real / $watermark_height * $watermark_width;
    }

    // помещаем водяной знак на изображение (здесь задаётся расположение ватермарка на картинке)
    $dest_x = (($size[0]) / 2) - (($watermark_width_real) / 2);
    $dest_y = (($size[1]) * 0.873) - (($watermark_height_real) / 2);

    imagealphablending($image, true);
    imagealphablending($watermark, true);

    imageSaveAlpha($image, true);
    // создаём новое изображение (использована функция поддерживающая масштабирование ватермарка вместо обычной imagecopy)
    imagecopyresampled($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width_real, $watermark_height_real, $watermark_width, $watermark_height);

    $imageformat = 'image'.$format;
    if ($format = 'png') {
      $imageformat($image, $filename);
    } else {
      $imageformat($image, $filename, 100);
    }

    // освобождаем память
    imagedestroy($image);
    imagedestroy($watermark);
    return true;
  }
 
Сверху Снизу