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

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


Unikal

Recommended Posts

На официальном форуме разработчиков написана что функция наложения ватермарка на картинки уже заложена в магазине в файле system/library/image.php и чтобы его активировать нужно положить watermark.png в папку с картинками и дописать строку

$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');
в файл system/helper/image.php

ну соотвественно почистить кеш от старых картинок

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

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


Такое впечатление , что благодаря нашим некоторым ребятам-профессионалам и их доработкам на форуме , у нас скрипт будет лучше чем оригинальный на офф.сайте. :( Присоединяюсь к теме .

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


У меня получилось, коряво конечно сделал...

Копируем watermark.png в папку с картинками.

В system/library/image.php переделал функцию watermark следующим образом:

В начале

//$watermark = $this->create($file);       	$watermark = imagecreatefrompng($file);	$watermark_width = imagesx($watermark);        $watermark_height = imagesy($watermark);

model/tool/image.php переделал следующим образом

<?phpclass ModelToolImage extends Model {	function resize($filename, $width, $height) {		if (!file_exists(DIR_IMAGE . $filename) || !is_file(DIR_IMAGE . $filename)) {			return;		} 				$old_image = $filename;		$new_image = 'cache/' . substr($filename, 0, strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.jpg';				if (!file_exists(DIR_IMAGE . $new_image) || (filemtime(DIR_IMAGE . $old_image) > filemtime(DIR_IMAGE . $new_image))) {			$path = '';						$directories = explode('/', dirname(str_replace('../', '', $new_image)));						foreach ($directories as $directory) {				$path = $path . '/' . $directory;								if (!file_exists(DIR_IMAGE . $path)) {					@mkdir(DIR_IMAGE . $path, 0777);				}					}						$image = new Image(DIR_IMAGE . $old_image);						$image->resize($width, $height);			if(($width > 110)&&($height > 110)&&($width < 130)&&($height < 130)){				$image->watermark(HTTP_IMAGE . 'watermark_small.png', 'bottomright');			}			if(($width > 150)&&($height > 150)){				$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');			}									$image->save(DIR_IMAGE . $new_image);		}				if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {			return HTTPS_IMAGE . $new_image;		} else {			return HTTP_IMAGE . $new_image;		}		}}?>

Это нужно было для того,чтобы вставлять разные watermark'и для превьюшек и больших картинок

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


У меня получилось, коряво конечно сделал...Копируем watermark.png в папку с картинками.В system/library/image.php переделал функцию watermark следующим образом:В начале

//$watermark = $this->create($file);       	$watermark = imagecreatefrompng($file);	$watermark_width = imagesx($watermark);        $watermark_height = imagesy($watermark);
model/tool/image.php переделал следующим образом
<?phpclass ModelToolImage extends Model {	function resize($filename, $width, $height) {		if (!file_exists(DIR_IMAGE . $filename) || !is_file(DIR_IMAGE . $filename)) {			return;		} 				$old_image = $filename;		$new_image = 'cache/' . substr($filename, 0, strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.jpg';				if (!file_exists(DIR_IMAGE . $new_image) || (filemtime(DIR_IMAGE . $old_image) > filemtime(DIR_IMAGE . $new_image))) {			$path = '';						$directories = explode('/', dirname(str_replace('../', '', $new_image)));						foreach ($directories as $directory) {				$path = $path . '/' . $directory;								if (!file_exists(DIR_IMAGE . $path)) {					@mkdir(DIR_IMAGE . $path, 0777);				}					}						$image = new Image(DIR_IMAGE . $old_image);						$image->resize($width, $height);			if(($width > 110)&&($height > 110)&&($width < 130)&&($height < 130)){				$image->watermark(HTTP_IMAGE . 'watermark_small.png', 'bottomright');			}			if(($width > 150)&&($height > 150)){				$image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');			}									$image->save(DIR_IMAGE . $new_image);		}				if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {			return HTTPS_IMAGE . $new_image;		} else {			return HTTP_IMAGE . $new_image;		}		}}?>
Это нужно было для того,чтобы вставлять разные watermark'и для превьюшек и больших картинок
Какая версия ОС?model/tool/image.php - можна поподробней?... как я понял - изменения надо делать в system/helper/image.php ?
Надіслати
Поділитися на інших сайтах


вопрос решил.кому интересно - сюда http://forum.opencart.com/viewtopic.php?f=20&t=3664попробовал - работает

Если возможно напиши здесь по русски в какой файл какую строку добавлять на какое место, куда кидать картинку я эти топики видел но у меня почему-то не выходит из-за проблем с английским и php в целом то ход мысли понятен но на эксперименты особо времени нет несколько раз попробовал у меня почему-то не получилось не фига
Надіслати
Поділитися на інших сайтах


шаг 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');
снова чистим кеш картинок и смотрим..

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

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


Работает фишка!!! (делал на 1.4.0) :) Спасибо

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

Уменя изображение watermark большое . На центральной картинке выглядит как отлично . Но на маленьких изображениях видна только его часть . По-правильному на маленьких вспомогательных изображениях watermark не нужен .

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

post-70-1293741785,2144_thumb.jpg

Единственно что смысл этой штуки должен быть в защите изображения от "злостного" копирования . А прорисовка watermark делается внизу на белом фоне (рис 2), в большинстве случаев не попадая на само изображение (рис 1). Его легко вырезать в фотошопе а значит и теряется некоторый принципиальный смысл этой фишки.

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

post-70-1293741785,1959_thumb.jpg

post-70-1293741785,232_thumb.jpg

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


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

я в начале темы кидал как у себя сделал.

как-то так

        if(($width > 110)&&($height > 110)&&($width < 130)&&($height < 130)){            $image->watermark(HTTP_IMAGE . 'watermark_small.png', 'bottomright');         }         if(($width > 150)&&($height > 150)){            $image->watermark(HTTP_IMAGE . 'watermark.png', 'bottomright');         }
это в файле /tool/image.php

ну и подставить размеры превьюшек.

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


  • 2 weeks later...
  • 3 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');
снова чистим кеш картинок и смотрим..

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

у меня в дериктории /system/helper/ нет файла image.php

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


  • 5 weeks later...

1)Вообще если правильно делать то это выглядит примерно вот так.Открываем /system/library/image.phpТам уже есть функция watermark()Меняем

public function addwatermark($position = 'bottomright') {        $watermark = imagecreatefrompng(DIR_IMAGE . 'userfiles/watermark.png');        $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;           case 'middle':                $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, $watermark_width, $watermark_height);        imagedestroy($watermark);     }
2)Добавить следущий код в /system/helper/image.php
function image_watermark($filename) {	if ( (!file_exists(DIR_IMAGE . $filename)) && (!file_exists(DIR_IMAGE . 'cache/' . $filename)) ) {		return;	} 	if (file_exists(DIR_IMAGE . 'cache/' . $filename)) {		$old_image = DIR_IMAGE . 'cache/' . $filename;	} else {		$old_image = DIR_IMAGE . $filename;	}	$new_image = 'cache/' . substr($filename, 0, strrpos($filename, '.')) . '-w.jpg';	if (!file_exists(DIR_IMAGE . $new_image) || (filemtime($old_image) > filemtime(DIR_IMAGE . $new_image))) {		$image = new Image($old_image);		$image->addwatermark('middle');		$image->save(DIR_IMAGE . $new_image);	}	if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {		return HTTPS_IMAGE . $new_image;	} else {		return HTTP_IMAGE . $new_image;	}}
Если Вы хотите использовать watermark в всплывющем окнеоткройте /catalog/controller/product/product.phpнайдите строку
$this->data['popup']  = image_resize($image, $this->config->get('config_image_popup_width'), $this->config->get('config_image_popup_height'));
замените на
$productimage = image_resize($image, $this->config->get('config_image_popup_width'),$this->config->get('config_image_popup_height'));$wmimage = image_watermark(basename($productimage));$this->data['popup'] = $wmimage;
Надіслати
Поділитися на інших сайтах


1.4.8b с частичными изменениями на 1.4.9.1.Вариант den не работает. Предыдущий вариант работает.

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


1.4.8b с частичными изменениями на 1.4.9.1.Вариант den не работает. Предыдущий вариант работает.

Да я знаю ,но там надо поработать ручкакми..А 1.4.9.1 я еще не видел.
Надіслати
Поділитися на інших сайтах


Попробовал сделать Watermark в версии 1.4.9.1.

Не работает.

Поделитесь решением, если у кого-то работает.

СПАСИБО ЗАРАНЕЕ!

Это для версии 1.4.9.1.

Пример работы с popup

1)Меняем функцию public function watermark($file, $position = 'bottomright') в /system/library/image.php

public function addwatermark($position = 'bottomright') {        $watermark = imagecreatefrompng(DIR_IMAGE . 'data/watermark.png');        $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;           case 'middle':                $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, $watermark_width, $watermark_height);        imagedestroy($watermark);     }
2Добавляем функию catalog/model/tool/image.php

function image_watermark($filename) {         if ( (!file_exists(DIR_IMAGE . $filename)) && (!file_exists(DIR_IMAGE . 'cache/data/' . $filename)) ) {      return;        }           if (file_exists(DIR_IMAGE . 'cache/data/' . $filename)) {      $old_image = DIR_IMAGE . 'cache/data/' . $filename;       } else {      $old_image = DIR_IMAGE . $filename;           }    $new_image = 'cache/data/' . substr($filename, 0, strrpos($filename, '.')) . '-w.jpg';       if (!file_exists(DIR_IMAGE . $new_image) || (filemtime($old_image) > filemtime(DIR_IMAGE . $new_image))) {      $image = new Image($old_image);      $image->addwatermark('middle');      $image->save(DIR_IMAGE . $new_image);          }        if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {      return HTTPS_IMAGE . $new_image;          } else {      return HTTP_IMAGE . $new_image;       }	}
3 в сontroler/product/product.php строка 188 и189 удоляем и добавляем

$productimage =  $this->model_tool_image->resize($image, $this->config->get('config_image_popup_width'),$this->config->get('config_image_popup_height'));             $wmimage = $this->model_tool_image->image_watermark(basename($productimage));            $this->data['popup'] = $wmimage;$productimage =  $this->model_tool_image->resize($image, $this->config->get('config_image_thumb_width'),$this->config->get('config_image_thumb_height'));             $wmimage = $this->model_tool_image->image_watermark(basename($productimage));            $this->data['thumb'] = $wmimage;

post-303-1293741788,4518_thumb.gif

post-303-1293741788,4773_thumb.gif

post-303-1293741788,5007_thumb.gif

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


  • 3 weeks later...

Может гражданин имел ввиду водяной знак (watermark), как в Photoshop/Freehand/CorelDraw?

Чтобы и выглядело, но при увеличении виднелся логотип?

Тада надо в указаных инструментах, кои, если ломаны со вкусом, то имеют фукцию для введения текстов с различными опциями.

А так, с серверным скриптом, надо CSS-ом подделать, а-то торчит как стоп сигнал,

типа

style="opacity:0.4;filter:alpha(opacity=40)"
для IE. Или в Мозилле:
-moz-opacity:0.5;
, где .5 = 50% светозаполнения

Моё сугубое мнение, ессно.

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


  • 2 weeks later...

arning: imagecreatefrompng(/home/***/****.ru/docs/image/watermark.png) [function.imagecreatefrompng]: failed to open stream: No such file or directory in /home/*****/****.ru/docs/system/library/image.php on line 91Warning: imagesx(): supplied argument is not a valid Image resource in /home/*****/*****.ru/docs/system/library/image.php on line 93Warning: imagesy(): supplied argument is not a valid Image resource in /home/*****/****.ru/docs/system/library/image.php on line 94Warning: imagecopy(): supplied argument is not a valid Image resource in /home/*****/******.ru/docs/system/library/image.php on line 115Warning: imagedestroy(): supplied argum ......
о ем это говорит и как исправить?

Все делал по мануалу, но ошибка не уходит=(

Заранее спасибО!

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


  • 3 weeks later...

Всем доброго времени суток. Version 0.1.3. Делал по следующему примеру, все заработало с первого раза. Изображение ватермарк размером 500х500 рх, поэтому его видно только на попапе товара(что мне и нужно). Прошу обратить внимание на следующее: "site/system/helper/image.php" -> "site/catalog/model/tool/image.php".

Пример тут: http://shop.m-prince.kz/index.php?route=product/product&product_id=307.

Всем спасибо за труд, особенно gordiichuk

шаг 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');
снова чистим кеш картинок и смотрим..

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

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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