Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Доработка] Watermark (логотип на картинках)


Unikal

Recommended Posts

допустим прозрачная выпуклая надпись при экспорте из psd в png становится просто белой плоской надписью...

Вы перед сохранением растрируйте слой или преобразуйте в смартобъект
Надіслати
Поділитися на інших сайтах

  • 2 weeks later...
  • 2 weeks later...

Это для того, чтобы watermark находился посередине. У себя я его размести справа внизу с небольшим отступом от края справа и снизу. Для этого нужно в файле system/library/image.php найти

case 'bottomright':
                $watermark_pos_x = $this->info['width'] - $watermark_width;
                $watermark_pos_y = $this->info['height'] - $watermark_height;
                break;

и заменить на

case 'bottomright':
                $watermark_pos_x = $this->info['width'] - $watermark_width - 20;
                $watermark_pos_y = $this->info['height'] - $watermark_height - 40;
                break;

Цифрами можно менять отступ

Спасибо.

А если справа сверху разместить, как правильно править код?

Я так понимаю ,это вот этот кусок?

case 'topright':
                $watermark_pos_x = $this->info['width'] - $watermark_width;
                $watermark_pos_y = 0;
                break;
Надіслати
Поділитися на інших сайтах


Да. Там можно играть числами как угодно.

Приведите пример, а то варианты вроде:

case 'topright':
                $watermark_pos_x = $this->info['width'] - $watermark_width = 20;
                $watermark_pos_y = 20;
                break;

приводят к ошибке

Надіслати
Поділитися на інших сайтах


Естественно к ошибке, обратите внимание на знаки "равно":

$watermark_pos_x = $this->info['width'] - $watermark_width = 20;

Надо так:

$watermark_pos_x = 20;

или

$watermark_pos_x = ($this->info['width'] - $watermark_width) знак 20;

знак это + или - или / и т.д.

Надіслати
Поділитися на інших сайтах


Не выходит что-то.

Вот эту строку, для замены, в коде не найти

imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);
Дримвьювером не нашел.

Подправить этот модуль, с комментариями в "ридми" и в коде (в месте позиционирования) можно попросить?

Надіслати
Поділитися на інших сайтах


case 'bottomright':
                $watermark_pos_x = $this->info['width'] - $watermark_width - 20; // чем меньше цифра, тем ближе к правому краю 
                $watermark_pos_y = $this->info['height'] - $watermark_height - 70; // Увеличивая цифру идёт смещение по вертикали вверх
                break;

Это я смещаю относительно низа. Если за основу брать правый верхний угол тогда здесь

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

прописать так

$image->watermark(DIR_IMAGE . 'watermark.png', 'topright');

Вот эту строку, для замены, в коде не найти

imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);
В версии 0.2.2 она уже такая как нужно, её не нужно трогать.
Надіслати
Поділитися на інших сайтах

Странно, но игра с цифрами, не дает, ровным счетом, ничего.

Я уже везде их пробовал править (catalog/model/tool/image.php и в vq2-system_library_image.php), каждый раз удаляю изображения из кэша.

Не двигается ватермарк.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

шаг 1

картинку watermark.png кидаем в папку site/image/data (..у меня лично в site/image/ и в site/image/data)

шаг 2

в site/system/library/image.php меняем функцию public function watermark (идет после public function resize). Меняем ее на:

public function watermark($file, $position = 'bottomright') {
       
       //Pb ! you don't work on the true object => you must modify the "create" method ($mime = $this->info['mime']; it's work only if we have the same image format !
            //$watermark = $this->create($file);

            //Prefer PNG files => it's not optimized but it's work
       $watermark = imagecreatefrompng($file);
           
            $watermark_width  = imagesx($watermark);
            $watermark_height = imagesy($watermark);

            switch($position) {
                case 'topleft':
                    $watermark_pos_x = 0;
                    $watermark_pos_y = 0;
                    break;
                case 'topright':
                    $watermark_pos_x = $this->info['width'] - $watermark_width;
                    $watermark_pos_y = 0;
                    break;
                case 'bottomleft':
                    $watermark_pos_x = 0;
                    $watermark_pos_y = $this->info['height'] - $watermark_height;
                    break;
                case 'bottomright':
                    $watermark_pos_x = $this->info['width'] - $watermark_width;
                    $watermark_pos_y = $this->info['height'] - $watermark_height;
                    break;
            }
           
            imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);
           
            imagedestroy($watermark);
        }
(...просто копируем вышеизложенный фрагмент кода и заменяем на похожий в image.php)

шаг 3

в site/system/helper/image.php находим строчки типа

$image = new Image(DIR_IMAGE . $old_image);
                    $image->resize($width, $height);
                    $image->save(DIR_IMAGE . $new_image);

и меняем их на

$image = new Image(DIR_IMAGE . $old_image);
    $image->resize($width, $height);
    $image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');
    $image->save(DIR_IMAGE . $new_image);
чистим кеш картинок (удаляем содержимое папки site/image/cache/data).

... должно заработать. Если нет - то пробуем поменять строку в шаге 3

$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');
на

$image->watermark(DIR_IMAGE . 'watermark.png', 'bottomright');
снова чистим кеш картинок и смотрим..

...отпишитесь работает или нет...

Всё отлично работает, спасибо!

Надіслати
Поділитися на інших сайтах


Работает на OpenCart 1.4.9.1/2/3

1. Создайте PNG водяной знак, назовите его watermark.png и скопировать его в image/.

2. Теперь необходимо отредактировать 2 PHP файла

3. Первый файл: system/library/image.php

линий 93-121, и вы увидите следующий код:

...

заменить на

...

4.Второй файл для редактирования catalog/model/tool/image.php

Перейти к строке 27, и вы увидите следующий код:

...

после него вставить следующий код:

...

В коде выше, вы можете определить нужное положение водяного знака (topleft, topright, bottomleft, bottomright or center).

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

5. Заключительный шаг: удалить все данные в папке image/cache/data, чтобы создалиь изображения с водяными знаками.

Вот и все! Удачи!

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

Реально работает!!! Автору респект и уважуха )

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
  • 1 month later...

У меня получилось вот так сделать. Взял с иностранного сайта. Работает на версиях v1.4.7, v1.4.8, v1.4.8b, v1.4.9, v1.4.9.1, v1.4.9.2, v1.4.9.3, v1.4.9.4, v1.4.9.5, v1.5.0, v1.5.0.1, v1.5.0.2, v1.5.0.3, v1.5.0.4, v1.5.0.5, v1.5.1, v1.5.1.1, v1.4.9.6, v1.5.1.2, v1.5.1.3

Создаём файл watermark.png с разрешением 268х50 (кому нужно в прикреплённом файле). Кидаем его в папку image. Далее правим файлы

В catalog/model/tool/image.php находим

$image = new Image(DIR_IMAGE . $old_image);

после вставляем

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

В файле system/library/image.php заменяем

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

$watermark = imagecreatefrompng($file);

находим

case 'bottomright':
и перед ним добавляем

case 'center':
			$watermark_pos_x = ($this->info['width']- $watermark_width)/2;
			$watermark_pos_y = ($this->info['height']- $watermark_height)/2;
			break;

далее находим строку

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);

Это для того, чтобы watermark находился посередине. У себя я его размести справа внизу с небольшим отступом от края справа и снизу. Для этого нужно в файле system/library/image.php найти

case 'bottomright':
				$watermark_pos_x = $this->info['width'] - $watermark_width;
				$watermark_pos_y = $this->info['height'] - $watermark_height;
				break;

и заменить на

case 'bottomright':
				$watermark_pos_x = $this->info['width'] - $watermark_width - 20;
				$watermark_pos_y = $this->info['height'] - $watermark_height - 40;
				break;

Цифрами можно менять отступ

У кого стоит vqmod можно использовать прикреплённый архив.

Как удалить ватермарк из слаедшоу ? Opencart 1.5.1.3 Vqmod.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Как удалить ватермарк из слаедшоу ? Opencart 1.5.1.3 Vqmod.

Тоже интересует решение по слайдеру и баннерам.

Я сделал так В catalog/model/tool/image.php

if ($width > 90 || $height > 90) {
   $image->watermark(DIR_IMAGE . 'watermark.png', 'center');
}
изменил на

if (($width > 90 || $height > 90) and $height != 270) {
   $image->watermark(DIR_IMAGE . 'watermark.png', 'center');
}
Думаю понятно у меня высота банера 270пх, т.е водяной знак не встает на картинки по высоте 270пх
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Сделал по методу Bazillio, получилось с первого раза. Магазин работатет на OStore 1.5.3.

От себя добавлю, что хотел watermark только на большом всплывающем изображении в галерее, на всех остальных картинах магазина - нет.

Для чего в коде:

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

изменил width, с 90 до 700(большие картинки у меня размером 800*600), но появились проблемы: на некоторых больших баннерах/слайдшоу, так же появились watermark.

Для решения проблемы изменил немного код, вставил вместо или('||') оператор('&'):

$image = new Image(DIR_IMAGE . $old_image);
  if ($width > 700 & $height > 500) {  
  $image->watermark(DIR_IMAGE . 'watermark.png', 'center');
  }

Теперь watermark есть только на больших картинках слайд-шоу, в подробном описании товара.

Отдельное спасибо Bazilio, за четко оформелнный детальный пост!

Надіслати
Поділитися на інших сайтах


+1

Именно это решение на мой взгляд, самое удачное.

Кому нужен шаблон вотермарка.png лежит в атаче. В фотошопе путём редактирования, наложить свой логотип.

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

А так ваще вкумод рульный получился, одним движением брюки превратились в отличные шорты, и не надо лопатить кучу файлов!

<modification>
<id>Add Watermark</id>
<version>1.0</version>
<vqmver>1.1.0</vqmver>
<author>Rob Horsfield and thread 3664</author>
<file name="catalog/model/tool/image.php">
<operation>
<search position="after"><![CDATA[
$image->resize($width, $height);
]]></search>
<add><![CDATA[

if ($width > 150 || $height > 150) {   
   $image->watermark(DIR_IMAGE . 'watermark.png', 'center');
}
]]></add>
</operation>
</file>
  
<file name="system/library/image.php">
<operation>
<search position="replace"><![CDATA[
$watermark = $this->create($file);
]]></search>
<add><![CDATA[
$watermark = imagecreatefrompng($file);
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[
case 'bottomright':
]]></search>
<add><![CDATA[
case 'center':
			$watermark_pos_x = ($this->info['width']- $watermark_width)/2;
			$watermark_pos_y = ($this->info['height']- $watermark_height)/2;
			break;
]]></add>
</operation>
<operation>
<search position="replace"><![CDATA[
imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, 120, 40);
]]></search>
<add><![CDATA[
imagecopy($this->image, $watermark, $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark_width, $watermark_height);
]]></add>
</operation>
</file>
</modification>
  • +1 1
Надіслати
Поділитися на інших сайтах


Хотел написать насчет ресайза, но molotochek опередил.

Напомню тогда о необходимости закрывать исходные изображения через .htaccess, иначе в водяных знаках смысла особого нет.

У меня изображения лежат не в самой /image, в а в поддиректориях, поэтому я просто добавил в них .htaccess с содержимым

Order allow,deny
Deny from all
Если у вас исходные лежат в директории /image, то закрывайте ее всю и открывайте нужные файлы/директории.
Надіслати
Поділитися на інших сайтах


Хотел написать насчет ресайза, но molotochek опередил.

Напомню тогда о необходимости закрывать исходные изображения через .htaccess, иначе в водяных знаках смысла особого нет.

У меня изображения лежат не в самой /image, в а в поддиректориях, поэтому я просто добавил в них .htaccess с содержимым

Order allow,deny
Deny from all
Если у вас исходные лежат в директории /image, то закрывайте ее всю и открывайте нужные файлы/директории.
будьте внимательнее

Как скрыть оригинальные картинки

Надіслати
Поділитися на інших сайтах

Ппц... по ходу на кого то мама в детсве до 14 лет одевала свои трусы, ну как можно быть таким занудой ?

Ну вывесь ты ссылку и скажи - мол пользуйтесь пацаны, нет жеж... Самый умный фанат ОНОТОЛЕ обязательно должен написать будьте внимательнееие. CФрилансер, заканчивай с пубертатом,а ?

Надіслати
Поділитися на інших сайтах


Ппц... по ходу на кого то мама в детсве до 14 лет одевала свои трусы, ну как можно быть таким занудой ?

Ну вывесь ты ссылку и скажи - мол пользуйтесь пацаны, нет жеж... Самый умный фанат ОНОТОЛЕ обязательно должен написать будьте внимательнееие. CФрилансер, заканчивай с пубертатом,а ?

твой бред меня забавляет. пиши ещё
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.