Watermark для Virtuemart
Признаться честно, мне реализация ватермарков (защитных картинок) для виртумарта давно не давала покоя. Почитал русскоязычные форумы, говорят, что нельзя это сделать автоматически, нужно внедрять защитные watermark в virtuemart при подготовке картинок товаров и т.д.
Логично предположить, что всё гораздо интереснее и не так тривиально. Так оно и оказалось на самом деле. Немного порыскав по англоязычным форумам нашел действительно рабочую связку, которой я с вами с радостью и делюсь.
Справедливости ради стоит отметить, что данная система 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.php и кидаем туда этот код:
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 32 | <?php // watermark.php // 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.png (маленькая картинка) watermark2.png (большая картинка) .
Всё! Можно пользоваться. Метод проверен лично мной на трех магазинах. Система работает. При попытке сохранения картинки ватермарк с неё не стирается. То есть выполняет свою задачу на 100%!
- Современные качественные материалы: шайба усиленная
- Классные автоматические ворота для Вашего дома от компании electrovision.ru
- Надежное буровое оборудование – залог успеха Вашего бизнеса

сентября 27, 2009 at 0:39
Здравствуйте, помогите пожалуйста.
Исполнил в точности ваш метод, однако
перестали картинки показываться вообще,
высвечивается небольшой квадрат на сером
фоне в котором крутится колесико, но
загрузки рисунка не происходит. Убираю из
папки .htaccess картинки показываются по
прежнему, снова копирую в папку – тот же
результат.
В чем может быть дело?
Спасибо. С уважением, Сергей.
сентября 27, 2009 at 0:41
проверьте путь до файла watermark.php, наличие необходимых картинок-ватермарков. Ну и убедитесь, что картинки товаров в формате jpg.
Но, скорее всего, не найден файл watermark.php
октября 28, 2009 at 14:26
И все же не работает. Тестировал на локальном (денвер)
joostina 1.2
VirtueMart 1.1.3 stable
картинки просто не открываются
октября 28, 2009 at 14:31
Проверьте синтаксис хтаксеса
октября 28, 2009 at 14:50
я в .htaccess не силен поэтому скопировал один в один, даже пытался прописать полный путь к watermark.php, типа
. Не помогло.
октября 31, 2009 at 16:22
Полный путь писать не нужно. Скорее всего, вы ошиблись в путях. хтаксес не понимает http
января 20, 2010 at 22:08
Тоже нужна даная штуковина пробовал но ни в какую не хочет работать после установки все старые рисунки становяться 0 по высоте и 0 по ширине и соотвественно ниче вообще не показывается. Может требуется какаято библиотека которая не установлена по умолчанию? Проверьте корректность этой строки if (($w>300)||($h>300)). Какого формата должен быть watermark.png png8 или png24. Покажите хоть один работающий пример.
января 20, 2010 at 22:20
Ура заработало проблема была в том что в файл watermark.php в самое начало добавлялись какието символы перед <?php и их небыло видно в дримвивере заметил их только при редактировании файла в фтп редакторе после удаления этих символов все заработало
января 20, 2010 at 23:10
Отлично
января 21, 2010 at 2:29
А как можно передвинуть ватермарк чуть выше и левее?
января 21, 2010 at 2:32
экспериментируйте с переменными w и h.
Сейчас в переменные записаны координаты правого нижнего угла
марта 5, 2010 at 14:22
у меня не работает. причина не известна. Показываются те же картинки – без ватермарков. значит не работает htaccess …не происходит пере направление, но почему не понятно
марта 5, 2010 at 15:04
не факт, что htaccess не работает. Вполне возможно, что ошибка в путях. Кстати, картинки, насколько я помню неплохо перезалить бы. На готовые вроде как не накладывается. Но я не помню точно
мая 7, 2010 at 1:49
не работает, все картинки перестали грузится
в чем может быть причина
мая 7, 2010 at 8:43
сорри за резкость, но проблема в кривых руках. Нужно не просто код скопипастить, а хотя бы проверить теги открытия/закрытия php
мая 7, 2010 at 21:05
теги присутствуют вместо картинки ссылка на нее в текстовом виде
мая 7, 2010 at 21:12
такое ощущение что в файле watermark.php ты сделал под себя настройки расположение папки с картинками–короче пути строятся не используя регулярные выражения
мая 9, 2010 at 9:54
Итак. В нашей системе три шага. Если всё правильно на каждом(!) из шагов, то всё работает. В первом шаге указана папка (хотя абсолютно всё равно, в какой папке будут картинки). Главное – чтобы в этой же папке были картинки с ватермарками и пхп-файл ватермарка
мая 19, 2010 at 22:55
пробывал пять раз и ни х….я, зато вот этот скрипт поставил с первого раза но не качаются с сайта картинки с вотермарком