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 | <?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.png (маленькая картинка) watermark2.png (большая картинка) .
Всё! Можно пользоваться. Метод проверен лично мной на трех магазинах. Система работает. При попытке сохранения картинки ватермарк с неё не стирается. То есть выполняет свою задачу на 100%!
- Современные качественные материалы: шайба усиленная
- Классные автоматические ворота для Вашего дома от компании electrovision.ru
- Надежное буровое оборудование – залог успеха Вашего бизнеса
38 коммент. к записи “Watermark для Virtuemart”
Прокомментировать
Рубрики
- javascript
- SEO
- Smarty
- UIPI
- Боремся со СПАМом
- Верстка
- Движки форумов
- Железо
- Забавно
- Интернет в лицах
- Интернет-магазины
- Новости
- Обзоры сайтов
- Обо всем
- Полезные скрипты
- Работа с CMS
- Создание сайтов
- Уроки рекламы
- Шаблоны

Здравствуйте, помогите пожалуйста.
Исполнил в точности ваш метод, однако
перестали картинки показываться вообще,
высвечивается небольшой квадрат на сером
фоне в котором крутится колесико, но
загрузки рисунка не происходит. Убираю из
папки .htaccess картинки показываются по
прежнему, снова копирую в папку – тот же
результат.
В чем может быть дело?
Спасибо. С уважением, Сергей.
проверьте путь до файла watermark.php, наличие необходимых картинок-ватермарков. Ну и убедитесь, что картинки товаров в формате jpg.
Но, скорее всего, не найден файл watermark.php
И все же не работает. Тестировал на локальном (денвер)
joostina 1.2
VirtueMart 1.1.3 stable
картинки просто не открываются
Проверьте синтаксис хтаксеса
я в .htaccess не силен поэтому скопировал один в один, даже пытался прописать полный путь к watermark.php, типа
. Не помогло.
Полный путь писать не нужно. Скорее всего, вы ошиблись в путях. хтаксес не понимает http
Тоже нужна даная штуковина пробовал но ни в какую не хочет работать после установки все старые рисунки становяться 0 по высоте и 0 по ширине и соотвественно ниче вообще не показывается. Может требуется какаято библиотека которая не установлена по умолчанию? Проверьте корректность этой строки if (($w>300)||($h>300)). Какого формата должен быть watermark.png png8 или png24. Покажите хоть один работающий пример.
Ура заработало проблема была в том что в файл watermark.php в самое начало добавлялись какието символы перед <?php и их небыло видно в дримвивере заметил их только при редактировании файла в фтп редакторе после удаления этих символов все заработало
Отлично
А как можно передвинуть ватермарк чуть выше и левее?
экспериментируйте с переменными w и h.
Сейчас в переменные записаны координаты правого нижнего угла
у меня не работает. причина не известна. Показываются те же картинки – без ватермарков. значит не работает htaccess …не происходит пере направление, но почему не понятно
не факт, что htaccess не работает. Вполне возможно, что ошибка в путях. Кстати, картинки, насколько я помню неплохо перезалить бы. На готовые вроде как не накладывается. Но я не помню точно
не работает, все картинки перестали грузится
в чем может быть причина
сорри за резкость, но проблема в кривых руках. Нужно не просто код скопипастить, а хотя бы проверить теги открытия/закрытия php
теги присутствуют вместо картинки ссылка на нее в текстовом виде
такое ощущение что в файле watermark.php ты сделал под себя настройки расположение папки с картинками–короче пути строятся не используя регулярные выражения
Итак. В нашей системе три шага. Если всё правильно на каждом(!) из шагов, то всё работает. В первом шаге указана папка (хотя абсолютно всё равно, в какой папке будут картинки). Главное – чтобы в этой же папке были картинки с ватермарками и пхп-файл ватермарка
пробывал пять раз и ни х….я, зато вот этот скрипт поставил с первого раза но не качаются с сайта картинки с вотермарком
Дорогой Автор!
Измените код пожалуйста!
Вместо
if (($w>300)||($h>300))
нужно написать
if (($w > 300)||($h > 300))
Тогда точно будет работать.
нет, неправильно ввелось,
вместо
нужно писать:
if (($w > 300)||($h > 300))
Тим прав! прописал if (($w > 300)||($h > 300)) после этого заработало.
Можно ли этот способ доработать, чтобы накладывать ТОЛЬКО на избранные картинки (товары) – стикер «Скидка», т.е. ввести проверку условия. Выводить Watermark для товаров со скидкой!
Ну начальная идея ж у вас есть. Дорабатывайте и делитесь с народом!
Пожалуйста помогите!!! У меня вместо картинок появились ссылки, при нажатии на которые выдаёт ошибку
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
А потом еще много кракозябров.
Значит у вас перед этим отправляются какие-то данные. Либо стоят лишние пробелы
Здоровский скрипт, только не выводит у меня ватермарк на увеличенное изображение. Миниатюра 130пик. – есть а 500пик. – нет.
Может кто подскажет в чем трабл.
Сори понял у меня RokBox выводит имедж. Возникает вопрос а как в него всунуть watermark. Может кто решил такую проблемку.
День добрый! Отличная статься, автору благодарность, но есть просьба для чайников, подскажите все таки как скажем надпись перенести в центр.
правьте координаты в функции imagecopy и будет вам счастье!
Все отлично работает! Большое спасибо автору!!!
Как я понимаю очень хорошее и быстрое решение, спасибо!
Но…у меня при клике на большую картинку товара, выдает ошибку:
internal server error
естественно, когда удаляю htaccess, картинка подгружается…
Может есть идеи?
(связка Joomla 1.5.23+Vmart 1.1.5)
Спасибо за решение. Отлично работает.
Если в имени файла изображения присутствует пробел, то картинки не грузятся.
естественно. Использование пробелов – правило дурного тона!
Просто кто-то не любит людей с плохим тоном))))))))
Специально для людей с плохим тоном:
После коммента
// Requested file path
вставляем
$path = urldecode($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']);
т.е. просто добавляем urldecode и заключаем в скобки
И все, пробелы нам до лампочки)
Всем успехов.
Отличное решение. Спасибо!
Всё четко работает. Благодарю