Watermark(водяные знаки) скрипт на PHP и Joomla ?

  • 240 Ответов
  • 120577 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн Keno

 Здравствуйте. Долго искал мамбот или на худой конец компонент c выводом watermark (водяных знаков) на изображение - но всё оказывалось не то, то компоненты слишком тяжелые (в плане запросов к БД) с многими не нужными мне функциями, то мамботы неподходящие, той же Multithumb, где водяные знаки выводятся только на выводе оригинального (большого) изображения и при копировании пользователями - водяных знаков не оставалось.
 Вот по блуждал немного по сети и нашел скрипт на PHP  - но скрипт у меня не хочет работать. Может какие-то конфликты с Joomla ?
 Собственно сам скрипт:
<?php

#####################################################
# originally gleaned from
# http://www.fedeblog.com.ar/files/view.php?i=Watermark/watermark.php
# Modified by Liem Bahneman (liem@bahneman.com) with some 
# path enhancements when called to handled subdirectories


#####################################################
# Okay to edit these

# what is the root of your files?
$basedir="/home/liem/public_html";
$watermarkimage="bd.png";

#####################################################
# end user modifiable stuff...

$file=basename($_GET['i']);
$path=($_GET['p']);

$image $basedir."/".$path."/".$file;
$watermark $basedir."/".$watermarkimage;

$im imagecreatefrompng($watermark);

$ext substr($image, -3);

if (
strtolower($ext) == "gif") {
    if (!
$im2 imagecreatefromgif($image)) {
        echo 
"Error opening $image!"; exit;
    }
} else if(
strtolower($ext) == "jpg") {
    if (!
$im2 imagecreatefromjpeg($image)) {
        echo 
"Error opening $image!"; exit;
    }
} else if(
strtolower($ext) == "png") {
    if (!
$im2 imagecreatefrompng($image)) {
        echo 
"Error opening $image!"; exit;
    }
} else {
    die;
}

imagecopy($im2$im, (imagesx($im2)/2)-(imagesx($im)/2), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));

if(
$_GET[repeat]) {
    
$waterless imagesx($im2) - imagesx($im);
    
$rest ceil($waterless/imagesx($im)/2);
    
    for(
$n=1$n<=$rest$n++) {
        
imagecopy($im2$im, ((imagesx($im2)/2)-(imagesx($im)/2))-(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));
        
imagecopy($im2$im, ((imagesx($im2)/2)-(imagesx($im)/2))+(imagesx($im)*$n), (imagesy($im2)/2)-(imagesy($im)/2), 00imagesx($im), imagesy($im));
    }
}

$last_modified gmdate('D, d M Y H:i:s T'filemtime ($image));

header("Last-Modified: $last_modified");
header("Content-Type: image/jpeg");
imagejpeg($im2,NULL,95);
imagedestroy($im);
imagedestroy($im2);

?>
Скрипт был взят с этого сайта http://rs.bahneman.com/protecting_your_images.php
 Может я сделал неправильные записи в .htaccess:

RewriteEngine on
RewriteBase /
RewriteRule ^(watermarked.*)/(.*\.*)$ /~liem/wm.php?p=$1&i=$2

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

*

Оффлайн Keno

 Для меня выходом по watermark стал простенький скрипт (см. ниже), который я нашел в сети. Работает он через .htaccess. В данном случае .htaccess перенаправляет с любой картинки на этот скрипт (_watermark.php), а этот скрипт уже по переданной информации (путь к картинке), добавляет на неё watermark.
  Итак, если это кого-то заинтересует вот краткое содержание что нужно сделать:
 1.Создаем в корне сайта папку с названием watermark и забрасываем в нее два этих файла:
_watermark.php (сам скрипт):
<?

waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "bottom=5,right=5");

function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) {
   $original = urldecode($original);
   $info_o = @getImageSize($original);
   if (!$info_o)
         return false;
   $info_w = @getImageSize($watermark);
   if (!$info_w)
         return false;

   list ($vertical, $horizontal) = split(',', $placement,2);
   list($vertical, $sy) = split('=', trim($vertical),2);
   list($horizontal, $sx) = split('=', trim($horizontal),2);

   switch (trim($vertical)) {
      case 'bottom':
         $y = $info_o[1] - $info_w[1] - (int)$sy;
         break;
      case 'middle':
         $y = ceil($info_o[1]/2) - ceil($info_w[1]/2) + (int)$sy;
         break;
      default:
         $y = (int)$sy;
         break;
      }

   switch (trim($horizontal)) {
      case 'right':
         $x = $info_o[0] - $info_w[0] - (int)$sx;
         break;
      case 'center':
         $x = ceil($info_o[0]/2) - ceil($info_w[0]/2) + (int)$sx;
         break;
      default:
         $x = (int)$sx;
         break;
      }

   header("Content-Type: ".$info_o['mime']);

   $original = @imageCreateFromString(file_get_contents($original));
   $watermark = @imageCreateFromString(file_get_contents($watermark));
   $out = imageCreateTrueColor($info_o[0],$info_o[1]);

   imageCopy($out, $original, 0, 0, 0, 0, $info_o[0], $info_o[1]);
   if( ($info_o[0] > 250) && ($info_o[1] > 250) )
   {
   imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
   }

   switch ($info_o[2]) {
      case 1:
         imageGIF($out);
         break;
      case 2:
         imageJPEG($out);
         break;
      case 3:
         imagePNG($out);
         break;
         }

   imageDestroy($out);
   imageDestroy($original);
   imageDestroy($watermark);

   return true;
   }

?>

и watermark.png(вашу картинку)
 2.Создаем файл .htaccess:
DirectoryIndex index.php
 
<FilesMatch "\.(gif|jpg|png)$">
   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} -f
   RewriteRule ^(.*)$ /watermark/_watermark.php [T=application/x-httpd-php,L,QSA]
</FilesMatch>

и забрасываем его в папку с вашими картинками. К примеру в папку stories - в данном случае водяные знаки будут накладываться на все картинки и папки с картинками находящиеся в папке stories. Если нужно накладывать watermarkи не на все изображения папки stories, а на какие-то определенные папки с картинками - закидываем файл .htaccess именно в те папки с изображениями где нужно наложение водяных знаков.
Все! Ваши фотки с водяным знаком!

Скрипт был подкоректирован с учетом предложений, замечаний

1. Чтобы не было знака на аватарах пользователей или на картинках малого размера в _watermark.php была изменена строка:
imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
на:
if( ($info_o[0] > 250) && ($info_o[1] > 250) )
{
imageCopy($out, $watermark, $x, $y, 0, 0, $info_w[0], $info_w[1]);
}

250 - это размер картинки (ширина и высота), который указывает, что до 250 пикселей водяной знак не будет накладываться на изображение, а уже после 250 - будет (Размеры можно подгонять под себя).
2. Также была решена проблема не отображения картинок содержащие пробелы или русские буквы (см. пост ниже от Redstagm) Добавлено:
$original = urldecode($original);
3. Были исправлены мелкие неточности.

Внизу в архиве находятся все 3 выше перечисленные файла



[вложение удалено Администратором]

*

Оффлайн zlideni

У меня проблема такого плана http://joomlaforum.ru/index.php/topic,45450.new.html , этот скрипт даёт тот же результат а точнее в моём случае никакого. Жаль…

*

mashasd

Все зделала точно как написанно..... НЕРАБОТАЕТ

Кто может правильно поправить и доработать эту функцию ?  Помогите , пожалуйста...

*

Оффлайн Keno

См. 2-ой пост с правками и дополнениями.

*

Оффлайн zlideni

Права доступа 777 поставил для полного счастья, в остальном всё сделал как прописана.
.htaccess закидываю в папку с jpg  изображениями. Фотки открываются но без водяного знака.
“о умолчанию ето будет папка stories” про это по подробние.

*

Оффлайн DeeByZ

+1 все делал как сказано, не работает...

*

Оффлайн Keno

См. 2-ой пост с правками и дополнениями.

*

Оффлайн smls

Keno. какие атрибуты, у файлов должны быть? У меня вообще рисунки перестает показывать из той папки куда .htaccess запихиваю.

*

Оффлайн Keno

См. 2-ой пост с правками и дополнениями.

*

Оффлайн smls

У меня  через mosimage...

*

Оффлайн Morfei



htaccess.txt(тот что в root-корне) переименовали в  .htaccess (уточню главный .htaccess никуда удалять не надо он задает дополнительные параметры  для работы веб-сервера во всех каталогах (папках) ,а тот что я давал .htaccess -распространяет свое действие -только на папку stories(или на ту папку куда вы закинете с вашыми картинками)
 Права доступа выставили?

чей-то я не догнал, что надо сделать с этим файлом ???? :'(

*

Оффлайн zlideni

С этим .htaccess? Просто копируешь в паки с изображениями которые будут выводится через {mosimage}.

С этим .htaccess? Просто копируешь в паки с изображениями которые будут выводится через {mosimage}.

так он что должен иметь расширение .txt  ?

*

Оффлайн zlideni

ПОЧИТАЙ ВНИМАТЕЛЬНО 2 ПОСТ .

ПОЧИТАЙ ВНИМАТЕЛЬНО 2 ПОСТ .

перечитал нескольок раз! сделал _watermark.php  ,  загрузил watermark.png  , сделал .htaccess  (не .txt)
собственно вопрос... дольше никаких файлов не делаю ? и не переименовываю ? )))
кстати у тебя работает ???

*

Оффлайн zlideni

У МЕНЯ БЫЛЙ ДРУГИЕ ЗАДАЧИ…
Ты где собирайся  выводить изображение?
Если всё сделал как написано то посмотри что получилось…

У МЕНЯ БЫЛЙ ДРУГИЕ ЗАДАЧИ…
Ты где собирайся  выводить изображение?
Если всё сделал как написано то посмотри что получилось…


я хочу watermark на всех изображениях ФОРУМА (в дальнейшем может быть и сайта)! но не только на загружаемых но и на уже загруженных.

установил как написано, фотки перстали грузиться (((
P.S.  грузится половина фоток!!! закономерности нету   :o

« Последнее редактирование: 14.11.2008, 17:03:50 от huntter »

*

Оффлайн Keno

См. 2-ой пост с правками и дополнениями.

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

*

Оффлайн kokus

Все точно так же, сделал в точности по описанию и перестали отображаться картинки. Кто нашел решение, пожалуйста отпишитесь. Какие еще есть варианты вывода водяных знаков кроме этого скрипта и Multithumb?

*

Redstagm

Огромное спасибо автору топика, Keno.

Всё получилось с первого раза!


Но образовался вопрос на засыпку: каким способом можно обойти имена картинок содержащие пробелы или русские буквы?

!!!???!!!

*

Redstagm

Цитировать
Но образовался вопрос на засыпку: каким способом можно обойти имена картинок содержащие пробелы или русские буквы?

 :D Спасибо Алексу!!!!

function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) {

^добаить после этой строчки^

$original = urldecode($original);

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

вчера весь день убил..и дошел до истины..в скрипте
_watermark.php непрвильная строка
waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "watermark.png", "bottom=5,right=5");
если сам фаил называется _watermark.png то работать небудет..надо поправить
и в .htaccess который кладется в папку с имайджами поправить путь до файла
 RewriteRule ^(.*)$ /watermark/_watermark.php [T=application/x-httpd-php,L,QSA]
у меня в нем почемуто пробелы были..
после этого все картинки пометились водяным знаком.. и ничего не проподает
но возник вопрос..а как ввести ограничение на размер картинок??
скажем метить картинки размером от 100*100 и больше..меньше не трогать..
а то неохото пересортировывать картинки..

*

Redstagm

Цитировать
но возник вопрос..а как ввести ограничение на размер картинок??
скажем метить картинки размером от 100*100 и больше..меньше не трогать..
а то неохото пересортировывать картинки..

Можно сделать не изменяя скрипт, например ватермарк накладываться с правого, нижнего угла, можно сделать ватермарк например 1000х1000 а правый нижний угол оставить прозрачным, 100х100 или более.

*

Оффлайн abbbc

есть 2 формата картинки jpeg и jpg
Одна картинка а другая фотка. Пропишите правильно функции и расширения, возможно поэтому у вас не работает.


*

Оффлайн smls

Скрипт после исправления путей к файлу, заработал.
Как сделать так, чтоб ватермарк ставился только на изображения находящиеся в папке с .htaccess и на ставился на изображения из подпапок этой папки?

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