Сен
26

Watermark для Virtuemart

Признаться честно, мне реализация ватермарков (защитных картинок) для виртумарта давно не давала покоя. Почитал русскоязычные форумы, говорят, что нельзя это сделать автоматически, нужно внедрять защитные watermark в при подготовке картинок товаров и т.д.

Логично предположить, что всё гораздо интереснее и не так тривиально. Так оно и оказалось на самом деле. Немного порыскав по англоязычным форумам нашел действительно рабочую связку, которой я с вами с радостью и делюсь.

Справедливости ради стоит отметить, что данная система watermark работает не только в virtuemart, а в любой папке с картинками, которые вам нужно защитить.

Я немного модифицировал . Ввел проверку на размер изображения, т.к. при использовании слимбокса ватермарк исходной оказывается слишком мелким. После доработки мы видим следующую картину: на картинке шаблона товара у изображения мелкий watermark, а при увеличении он становится большим. Проверочную цифру можете подставить свою.

Итак, ближе к делу. Пошаговая инструкция.

1. В папке с изображениями товаров virtuemart (/components/com_virtuemart/shop_images/product/) создаем .htaccess следующего содержания

1
2
3
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(gif|jpeg|jpg|png)$ /components/com_virtuemart/shop_image/product/watermark.php [QSA,NC]

2. В той же папке создаем файл watermark. и кидаем туда этот код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// watermark.php</p>
// Path the the requested file
$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];

// Load the requested image
$image = imagecreatefromstring(file_get_contents($path));
$w = imagesx($image);
$h = imagesy($image);

if (($w>300)||($h>300))
{
// Load the watermark image
$watermark = imagecreatefrompng('watermark2.png');
}
else
{
$watermark = imagecreatefrompng('watermark.png');
}

$ww = imagesx($watermark);
$wh = imagesy($watermark);

// Merge watermark upon the original image (centred)
imagecopy($image, $watermark, $w-$ww, $h-$wh, 0, 0, $ww, $wh);

// Send the image
header('Content-type: image/jpeg');
imagejpeg($image,null,95);
exit();
?>

3. Копируем в эту папку два файла watermark. (маленькая ) watermark2.png (большая ) .

Всё! Можно пользоваться. Метод проверен лично мной на трех магазинах. Система работает. При попытке сохранения картинки ватермарк с неё не стирается. То есть выполняет свою задачу на 100%!

38 коммент. к записи “Watermark для Virtuemart”

  • K_E_V_in 27 сентября 2009 - 0:39

    Здравствуйте, помогите пожалуйста.
    Исполнил в точности ваш метод, однако
    перестали картинки показываться вообще,
    высвечивается небольшой квадрат на сером
    фоне в котором крутится колесико, но
    загрузки рисунка не происходит. Убираю из
    папки .htaccess картинки показываются по
    прежнему, снова копирую в папку – тот же
    результат.
    В чем может быть дело?
    Спасибо. С уважением, Сергей.

  • K_E_V_in 27 сентября 2009 - 0:41

    проверьте путь до файла watermark.php, наличие необходимых картинок-ватермарков. Ну и убедитесь, что картинки товаров в формате jpg.
    Но, скорее всего, не найден файл watermark.php

  • Виктор 28 октября 2009 - 14:26

    И все же не работает. Тестировал на локальном (денвер)
    joostina 1.2
    VirtueMart 1.1.3 stable
    картинки просто не открываются

  • K_E_V_in 28 октября 2009 - 14:31

    Проверьте синтаксис хтаксеса

  • Виктор 28 октября 2009 - 14:50

    я в .htaccess не силен поэтому скопировал один в один, даже пытался прописать полный путь к watermark.php, типа
    http://192.168.1.2/components/com_virtuemart/shop_image/product/watermark.php. Не помогло.

  • K_E_V_in 31 октября 2009 - 16:22

    Полный путь писать не нужно. Скорее всего, вы ошиблись в путях. хтаксес не понимает http

  • Яхтсмен 20 января 2010 - 22:08

    Тоже нужна даная штуковина пробовал но ни в какую не хочет работать после установки все старые рисунки становяться 0 по высоте и 0 по ширине и соотвественно ниче вообще не показывается. Может требуется какаято библиотека которая не установлена по умолчанию? Проверьте корректность этой строки if (($w>300)||($h>300)). Какого формата должен быть watermark.png png8 или png24. Покажите хоть один работающий пример.

  • Яхтсмен 20 января 2010 - 22:20

    Ура заработало проблема была в том что в файл watermark.php в самое начало добавлялись какието символы перед <?php и их небыло видно в дримвивере заметил их только при редактировании файла в фтп редакторе после удаления этих символов все заработало

  • K_E_V_in 20 января 2010 - 23:10

    Отлично :)

  • Яхтсмен 21 января 2010 - 2:29

    А как можно передвинуть ватермарк чуть выше и левее?

  • K_E_V_in 21 января 2010 - 2:32

    экспериментируйте с переменными w и h.
    Сейчас в переменные записаны координаты правого нижнего угла

  • rekrut 5 марта 2010 - 14:22

    у меня не работает. причина не известна. Показываются те же картинки – без ватермарков. значит не работает htaccess …не происходит пере направление, но почему не понятно

  • K_E_V_in 5 марта 2010 - 15:04

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

  • celentano 7 мая 2010 - 1:49

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

  • K_E_V_in 7 мая 2010 - 8:43

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

  • celentano 7 мая 2010 - 21:05

    теги присутствуют вместо картинки ссылка на нее в текстовом виде

  • celentano 7 мая 2010 - 21:12

    такое ощущение что в файле watermark.php ты сделал под себя настройки расположение папки с картинками–короче пути строятся не используя регулярные выражения

  • K_E_V_in 9 мая 2010 - 9:54

    Итак. В нашей системе три шага. Если всё правильно на каждом(!) из шагов, то всё работает. В первом шаге указана папка (хотя абсолютно всё равно, в какой папке будут картинки). Главное – чтобы в этой же папке были картинки с ватермарками и пхп-файл ватермарка

  • celentano 19 мая 2010 - 22:55

    пробывал пять раз и ни х….я, зато вот этот скрипт поставил с первого раза но не качаются с сайта картинки с вотермарком
    http://www.joomlaforum.ru/index.php?topic=35335.0

  • Тим 31 июля 2010 - 17:07

    Дорогой Автор!
    Измените код пожалуйста!
    Вместо

    if (($w>300)||($h>300))

    нужно написать

    if (($w > 300)||($h > 300))

    Тогда точно будет работать.

  • Тим 31 июля 2010 - 17:09

    нет, неправильно ввелось,
    вместо

    1
    if (($w&gt;300)||($h&gt;300))

    нужно писать:

    if (($w > 300)||($h > 300))

  • Андрей 30 сентября 2010 - 17:50

    Тим прав! прописал if (($w > 300)||($h > 300)) после этого заработало.

  • Alex 10 января 2011 - 19:37

    Можно ли этот способ доработать, чтобы накладывать ТОЛЬКО на избранные картинки (товары) – стикер «Скидка», т.е. ввести проверку условия. Выводить Watermark для товаров со скидкой!

  • K_E_V_in 18 января 2011 - 12:22

    Ну начальная идея ж у вас есть. Дорабатывайте и делитесь с народом!

  • Денис 18 февраля 2011 - 4:38

    Пожалуйста помогите!!! У меня вместо картинок появились ссылки, при нажатии на которые выдаёт ошибку

    Warning: Cannot modify header information – headers already sent by (output started at S:\home\hi-tech\www\components\com_virtuemart\shop_image\product\watermark.php:1) in S:\home\hi-tech\www\components\com_virtuemart\shop_image\product\watermark.php on line 29

    А потом еще много кракозябров.

  • K_E_V_in 18 февраля 2011 - 10:44

    Значит у вас перед этим отправляются какие-то данные. Либо стоят лишние пробелы

  • Topa 20 февраля 2011 - 12:49

    Здоровский скрипт, только не выводит у меня ватермарк на увеличенное изображение. Миниатюра 130пик. – есть а 500пик. – нет.
    Может кто подскажет в чем трабл.

  • Topa 20 февраля 2011 - 14:40

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

  • Никоалай 17 августа 2011 - 7:06

    День добрый! Отличная статься, автору благодарность, но есть просьба для чайников, подскажите все таки как скажем надпись перенести в центр.

  • K_E_V_in 17 августа 2011 - 10:10

    правьте координаты в функции imagecopy и будет вам счастье!

  • mikenti 9 сентября 2011 - 18:52

    Все отлично работает! Большое спасибо автору!!!

  • tigra 16 октября 2011 - 17:36

    Как я понимаю очень хорошее и быстрое решение, спасибо!
    Но…у меня при клике на большую картинку товара, выдает ошибку:
    internal server error
    естественно, когда удаляю htaccess, картинка подгружается…
    Может есть идеи? :)
    (связка Joomla 1.5.23+Vmart 1.1.5)

  • дмитрий 28 октября 2011 - 16:56

    Спасибо за решение. Отлично работает.

  • Ярослав 2 декабря 2011 - 13:45

    Если в имени файла изображения присутствует пробел, то картинки не грузятся.

  • K_E_V_in 3 декабря 2011 - 10:45

    естественно. Использование пробелов – правило дурного тона!

  • Ярослав 3 декабря 2011 - 13:53

    Просто кто-то не любит людей с плохим тоном))))))))
    Специально для людей с плохим тоном:
    После коммента
    // Requested file path
    вставляем
    $path = urldecode($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);

    т.е. просто добавляем urldecode и заключаем в скобки

    И все, пробелы нам до лампочки)
    Всем успехов.

  • K_E_V_in 3 декабря 2011 - 15:25

    Отличное решение. Спасибо!

  • Sanches 1 февраля 2012 - 19:15

    Всё четко работает. Благодарю

Прокомментировать

Рубрики

Облако меток

На волнах твиттера

В прямом эфире