Mantius Опубликовано 11 Июля 2008 Жалоба Поделиться Опубликовано 11 Июля 2008 В общем, вроде есть какие-то модификации с ватермарком, но они не устраивают хотя бы тем, что меняют файл на лету, а данная штука, по идее, только выдает пользователю измененную картинку, сами же файлы сервера остаются без изменений.Главные плюсы задумки это:1) Универсальность2) Широкие возможности3) Сохранение оригинала4) Изменение "на лету"(т.е. не требуется обработка имеющихся до установки модификации картинок)5) Ну ОЧЕНЬ простая установка и схема работы! Итак, выглядит это следующим образом:1) В корне форума папка watermark в ней два файла _watermark.php(собсно, скрипт) и _watermarkmini.png(логотип, который будет "разводить" и наклеивать на картинку).2) В uploads .htaccess содержит следующие директивы:Options +Indexes DirectoryIndex index.htm <FilesMatch "\.(gif|jpg|png)$"> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^(.*)$ /watermark/_watermarkmini.php [T=application/x-httpd-php,L,QSA] </FilesMatch>Проще говоря, если расширение файла из аплоадсов совпадает с вышеуказанными, то он заменяется на скрипт. Вот, собсно, содержимое скрипта(с рекламой, т.к. скрипт придумал не я, оставляю авторскую подпись, так сказать):<? /******************************************* * WWW.AGAKIDS.RU- поисковая система детских сайтов * watermark 0.1 ********************************************/ waterMark($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], "_watermarkmini.png", "bottom=5,right=5"); function waterMark($original, $watermark, $placement = 'bottom=5,right=5', $destination = null) { $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]); 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; } ?> В общем, всё вроде замечательно, только проблема в том, что не пашет это дело хоть убей=) При попытке просмотра картинки тупо перекидывает на главную форума. Если запустить сам скрипт, то ошибок не выдает. Штука на самом деле очень изящная и удобная, хотелось бы чтобы заработала, может кто подскажет что подправить нужно? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Mantius Опубликовано 14 Июля 2008 Автор Жалоба Поделиться Опубликовано 14 Июля 2008 На данный момент, удалось добиться исправной работы с любыми файлами gif|jpg|png, но на практике это почти не применимо, т.к. картинки всё равно вызываются в виде domain.ru/index.php?act=attach&type=post&id=xxxxx и .htaccess, очевидно, не относит их к "\.(gif|jpg|png)$"Пробовали что-то вроде <FilesMatch "(act=attach)">, всё равно не обрабатываются. Буду рад, если кто-нить подскажет как можно сделать. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 14 Июля 2008 Жалоба Поделиться Опубликовано 14 Июля 2008 1. Что мешает вызывать скрипт из attach.php?2. И с полупрозрачными PNG работает? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Mantius Опубликовано 14 Июля 2008 Автор Жалоба Поделиться Опубликовано 14 Июля 2008 2. И с полупрозрачными PNG работает?Да, причем, вполне корректно. Впрочем, не вижу в этом ничего нового-GD нормально приклеивает прозрачный фон, как правило.1. Что мешает вызывать скрипт из attach.php?Можно поподробнее? Может какие-то конкретные советы будут? На данный момент, удалось реализовать вызов обработки рисунков скриптом, но теперь проблема в том, что скрипт почему-то туго воспринимает URI с index.php?act=attach&type=post&id=xxxxx, а если ставить URL вместо URI, то получается зацикливание, т.к. при обращении скрипт .htaccess отправляет самого себя самому себе на обработку. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 14 Июля 2008 Жалоба Поделиться Опубликовано 14 Июля 2008 Да, причем, вполне корректно. Впрочем, не вижу в этом ничего нового-GD нормально приклеивает прозрачный фон, как правило.Я имел в виду прозрачный watermark. Можно поподробнее? Может какие-то конкретные советы будут? На данный момент, удалось реализовать вызов обработки рисунков скриптом, но теперь проблема в том, что скрипт почему-то туго воспринимает URI с index.php?act=attach&type=post&id=xxxxx, а если ставить URL вместо URI, то получается зацикливание, т.к. при обращении скрипт .htaccess отправляет самого себя самому себе на обработку.Мне кажется, раздел не тот Обыкновенным образом. Зачем зацикливаться на прикреплении обработчика через .htaccess? Можнео вынести в функцию нанесение вотермарка и отдачу. Далее в скрипте-обработчике нужно читать файл и вызывать эту функцию, а в attach.php найти место, где читается и отдаётся файл из папки /uploads/ и сделать этот вызов там. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Mantius Опубликовано 15 Июля 2008 Автор Жалоба Поделиться Опубликовано 15 Июля 2008 Я имел в виду прозрачный watermark.В общем, библиотека GD и сам скрипт, соответственно, адекватно воспринимают прозрачный цвет при наклеивании. Т.е. то, что было прозрачным фоном на рисунке-наклейке будет соответствовать содержимому в этой точке исходного рисунка.Зачем зацикливаться на прикреплении обработчика через .htaccess?Потому что по-другому я не умею просто.Далее в скрипте-обработчике нужно читать файл и вызывать эту функцию, а в attach.php найти место, где читается и отдаётся файл из папки /uploads/ и сделать этот вызов там.понял, буду искать значит. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.