Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


Unikal
 Поделиться

Рекомендованные сообщения

На официальном форуме разработчиков написана что функция наложения ватермарка на картинки уже заложена в магазине в файле 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

Ссылка на комментарий
Поделиться на других сайтах


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

Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

Большое спасибо за инструкцию, но возникла проблема: водяной знак добавился и на все превьющки товара. Подскажите пожалуйста как решить?

Ссылка на комментарий
Поделиться на других сайтах


  • 4 недели спустя...

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

как-то так

        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 недели спустя...
  • 3 недели спустя...

шаг 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 недель спустя...

Попробовал сделать Watermark в версии 1.4.9.1.Не работает.Поделитесь решением, если у кого-то работает.СПАСИБО ЗАРАНЕЕ!

Ссылка на комментарий
Поделиться на других сайтах


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 недели спустя...

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

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

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

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

типа

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

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

Ссылка на комментарий
Поделиться на других сайтах


Не работают эти варианты на "ocStore Version 0.1.3" :oops:

Да кстати никто не пробовал сделать на последнем русском магазине?
Ссылка на комментарий
Поделиться на других сайтах


  • 2 недели спустя...

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 недели спустя...

Всем доброго времени суток. 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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.