Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[Beta] Водяной знак на вложенные изображения

Здесь авторы могут постить бета-версии своих модификаций для phpBB 3.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
xalexz
phpBB 1.0.0
Сообщения: 6
Стаж: 10 лет 1 месяц
Благодарил (а): 1 раз

Re: [Beta] Водяной знак на вложенные изображения

Сообщение xalexz »

Всем привет!

Не знаю в чем была проблема, возможно в конфликте с мультизагрузчиком. (скорее всего).
Правда пришлось полностью переустановить весь форум (работающий 4 года) но теперь все работает! Ура.
Огромная благодарность автору за мод!
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение Shredder »

xalexz писал(а):возможно в конфликте с мультизагрузчиком. (скорее всего).
С каким мультизагрузчиком? Я же на предыдущей странице написал, что ставил этот мод вместе с мультизагрузчиком, и конфликтов у них нет.

В кривой установке твоя проблема была, либо в кривом форуме. "Старые" форумы часто этим страдают.
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 67 раз
Поблагодарили: 799 раз
Контактная информация:

[Path] Водяной знак на вложенные изображения

Сообщение Anvar »

Небольшие изменения для инструкции. includes/functions_upload.php
Устраняем всякое возможное влияние на загрузку аватар 
//Правка includes/functions_user.php(в инструкции) в дальнейшем уже не потребуется.

Найти

Код: Выделить всё

// Image Watermark Mod Start -->
		if (!isset($config['user_confirm_watermark']) || !$config['user_confirm_watermark'])
		{
			$wm_lock = true;
		}
		if ($this->is_image() && isset($config['img_create_watermark']) && $config['img_create_watermark'] && $wm_lock)
		{
			$this->watermark_images($this->extension);
		}
// <-- Image Watermark Mod End
Заменить на

Код: Выделить всё

// Image Watermark Mod Start -->
		if (!isset($config['user_confirm_watermark']) || !$config['user_confirm_watermark'])
		{
			$wm_lock = true;
		}
		if ($this->is_image() && isset($config['img_create_watermark']) && $config['img_create_watermark'] && $wm_lock && $_GET['mode'] != "avatar")
		{
			$this->watermark_images($this->extension);
		}
// <-- Image Watermark Mod End
Исключаем проблему с загрузкой анимации gif 
Анимация всё равно будет загружена, пусть даже без наложения изображения.
Найти

Код: Выделить всё

		if ($this->is_ani($this->destination_file))
		{
			$this->error[] = sprintf($user->lang[$this->upload->error_prefix . 'ANIMATE_GIF_WM_INWALID'], $this->destination_file);
		}
Заменить на

Код: Выделить всё

		if ($this->is_ani($this->destination_file))
		{
			$wn_types = false;
			$type = false;
		}
Ну и конечно в language/язык/common.php правку ANIMATE_GIF_WM_INWALID уже тоже не придётся делать.
На изображения будет наложен разный watermark, из расчёта размера изображений 
spacer.gif - Можно изменить на другое изображение в gif.
Найти

Код: Выделить всё

			$water = imagecreatefrompng('images/watermark.png');
Вставить после

Код: Выделить всё

			if (imagesx($img) < imagesx($water)*3)
			{
				$water = imagecreatefrompng('images/watermark_med.png');
				if (imagesx($img) < imagesx($water)*3)
				{
					$water = imagecreatefrompng('images/watermark_mini.png');
					if (imagesx($img) < imagesx($water)*3)
					{
						$water = imagecreatefrompng('images/watermark_zero.png');
						if (imagesx($img) < imagesx($water)*3)
						{
							$water = imagecreatefromgif('images/spacer.gif');
						}
					}
				}
			}
В случае если не возможно наложить изображение, то загрузить как есть, а не выдавать ошибку.
Найти и удалить

Код: Выделить всё

		else
		{
			$this->error[] = sprintf($user->lang['IMAGE_TYPE_WM_INWALID'], $type);
		}
Каждый этап можно делать не зависимо, т.е. выбрать именно то что вам нужно.
Вложения
images.zip
Watermark с разнами размерами
(9.74 КБ) 313 скачиваний
Последний раз редактировалось Anvar 12.10.2014 10:52, всего редактировалось 3 раза.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!
Anvar
Former team member
Сообщения: 1965
Стаж: 14 лет
Благодарил (а): 67 раз
Поблагодарили: 799 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение Anvar »

Кстати интересный баг обнаружен, если стоит phpBB Gallery, то при загрузке изображений в галерею подхватывается этот водяной знак, а если в ней настроен свой, то они отобразятся оба.

Пока не решал эту проблему, разместил по разным углам.
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 10 месяцев
Поблагодарили: 2 раза

Re: [Beta] Водяной знак на вложенные изображения

Сообщение kolu4iy »

Я сделал по другому: добавил автоматический ресайз водяного знака.

include/functions_upload.php
Коэффициенты подобраны эмпирически, для меня. Знак должен занимать 1/3 изображения по ширине. При этом, если он больше, чем 1/6 изображения по высоте, то он пропорционально уменьшается.

Код: Выделить всё

                        $sx = imagesx($img);
                        $sy = imagesy($img);

                        $ix = imagesx($water);
                        $iy = imagesy($water);

                        if( $ix!=0 && $iy!=0 )
                        {
                                $newix = intval($sx/3);
                                $newiy = intval($newix*$iy/$ix);

                                if ( $newiy>intval($sy/6) )
                                {
                                        $newiy = intval($sy/6);
                                        $newix = intval($ix*$newiy/$iy);
                                }

                                $thumb = imagecreatetruecolor($newix, $newiy);
                                imagealphablending($thumb, false);
                                imagesavealpha($thumb, true);
                                $transparent = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
                                imagefilledrectangle($thumb, 0, 0, $newix, $newiy, $transparent);

                                imagecopyresampled($thumb, $water, 0, 0, 0, 0, $newix, $newiy, $ix, $iy);

                                $im = $watermark->create_watermark($img, $thumb, $config['watermark_opacity'], $config['default_position']);

                                if (isset($im))
                                {
                                        switch ($type)
                                        {
                                                case 'jpg':
                                                        imagejpeg($im, $this->destination_file);
                                                break;
                                                case 'gif':
                                                        imagegif($im, $this->destination_file);
                                                break;
                                                case 'png':
                                                        imagepng($im, $this->destination_file);
                                                break;
                                        }
                                }
                                else
                                {
                                        $this->error[] = sprintf($user->lang[$this->upload->error_prefix . 'GENERAL_UPLOAD_ERROR'], $this->destination_file);
                                }
                        }
                        else
                        {
                                $this->error[] = sprintf($user->lang['IMAGE_TYPE_WM_INWALID'], $type);
                        }
deamon739
phpBB 1.4.1
Сообщения: 41
Стаж: 13 лет 11 месяцев
Благодарил (а): 12 раз

Re: [Beta] Водяной знак на вложенные изображения

Сообщение deamon739 »

kolu4iy писал(а):Я сделал по другому: добавил автоматический ресайз водяного знака.

include/functions_upload.php
Коэффициенты подобраны эмпирически, для меня. Знак должен занимать 1/3 изображения по ширине. При этом, если он больше, чем 1/6 изображения по высоте, то он пропорционально уменьшается.
В каком месте надо сделать эту вставку? После строки?

Код: Выделить всё

$water = imagecreatefrompng('images/watermark.png');
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 10 месяцев
Поблагодарили: 2 раза

Re: [Beta] Водяной знак на вложенные изображения

Сообщение kolu4iy »

Да.
Для однозначности весь текст подправленной функции watermark_images:

Код: Выделить всё

        function watermark_images($type)
        {       
                global $config, $user;
                
                $wn_types = unserialize($config['wm_img_type']);
                
                if ($this->is_ani($this->destination_file))
                {
                        $this->error[] = sprintf($user->lang[$this->upload->error_prefix . 'ANIMATE_GIF_WM_INWALID'], $this->destination_file);
                }
         
                if ($type == 'jpeg')
                {
                        $type = 'jpg';
                }
                
                if (in_array($type, $wn_types))
                {
                        $file = $this->destination_file;
                        $watermark = new watermark();
                        switch ($type)
                        {
                                case 'jpg':
                                        $img = imagecreatefromjpeg($this->destination_file);
                                break;
                                case 'gif':
                                        $img = imagecreatefromgif($this->destination_file);
                                break;
                                case 'png':
                                        $img = imagecreatefrompng($this->destination_file);
                                break;
                                default:
                                        $this->error[] = sprintf($user->lang['IMAGE_TYPE_WM_INWALID'], $type);
                                        return;
                                break;
                        }
                        
                        $water = imagecreatefrompng('images/watermark.png');
                        $sx = imagesx($img);
                        $sy = imagesy($img);
                 
                        $ix = imagesx($water);
                        $iy = imagesy($water);
                        
                        if( $ix!=0 && $iy!=0 )
                        {
                                $newix = intval($sx/3);
                                $newiy = intval($newix*$iy/$ix);
                                
                                if ( $newiy>intval($sy/6) )
                                {
                                        $newiy = intval($sy/6);
                                        $newix = intval($ix*$newiy/$iy);
                                }
                                
                                $thumb = imagecreatetruecolor($newix, $newiy);
                                imagealphablending($thumb, false);
                                imagesavealpha($thumb, true);
                                $transparent = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
                                imagefilledrectangle($thumb, 0, 0, $newix, $newiy, $transparent);
                                imagecopyresampled($thumb, $water, 0, 0, 0, 0, $newix, $newiy, $ix, $iy);
                                
                                $im = $watermark->create_watermark($img, $thumb, $config['watermark_opacity'], $config['default_position']);
                                
                                if (isset($im))
                                {
                                        switch ($type)
                                        {
                                                case 'jpg':
                                                        imagejpeg($im, $this->destination_file);
                                                break;
                                                case 'gif':
                                                        imagegif($im, $this->destination_file);
                                                break;
                                                case 'png':
                                                        imagepng($im, $this->destination_file);
                                                break;
                                        }
                                }
                                else
                                {
                                        $this->error[] = sprintf($user->lang[$this->upload->error_prefix . 'GENERAL_UPLOAD_ERROR'], $this->destination_file);
                                }
                        }
                        else
                        {
                                $this->error[] = sprintf($user->lang['IMAGE_TYPE_WM_INWALID'], $type);
                        }
                }
                else
                {
                        $this->error[] = sprintf($user->lang['IMAGE_TYPE_WM_INWALID'], $type);
                }
        }
deamon739
phpBB 1.4.1
Сообщения: 41
Стаж: 13 лет 11 месяцев
Благодарил (а): 12 раз

Re: [Beta] Водяной знак на вложенные изображения

Сообщение deamon739 »

kolu4iy при использовании автоматического ресайза водяного знака при заливке фото через tapatalk, выдается ошибка - jpg не поддерживается для установки водяного знака (
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 9 лет 10 месяцев
Поблагодарили: 2 раза

Re: [Beta] Водяной знак на вложенные изображения

Сообщение kolu4iy »

kolu4iy при использовании автоматического ресайза водяного знака при заливке фото через tapatalk, выдается ошибка - jpg не поддерживается для установки водяного знака (
Возможно, что это от того, что в коде жестко прописано

Код: Выделить всё

$water = imagecreatefrompng('images/watermark.png');
У вас сам водяной знак - лежит в images/watermark.png? И он точно .png?

Вообще код достаточно прозрачный, но лично мне, если честно, не хочется поднимать копию форума, ставить туда tapatalk, и ловить место, где будет ругаться php. Буду рад если коллеги с уже установленным tapatalk подскажут куда копать - возможно, что с его (tapatalk) установкой стандартный процесс загрузки вложений как-то меняется, и данная функция получает, например, уже измененный тип картинки (не .jpg).
deamon739
phpBB 1.4.1
Сообщения: 41
Стаж: 13 лет 11 месяцев
Благодарил (а): 12 раз

Re: [Beta] Водяной знак на вложенные изображения

Сообщение deamon739 »

kolu4iy писал(а):У вас сам водяной знак - лежит в images/watermark.png? И он точно .png?
Файл лежит именно по указанному пути.

После вставки кода по ресайзу водяного знака со стационарной машины загрузка работает без ошибок. Ошибка возникает только при использовании на мобильном устройстве через приложение tapatalk.

Вернул код как было изначально, т.е. убрал авторесайз ватермарка. На данный момент этот ресайз не критичен.
Но спасибо за отклик.
Аватара пользователя
romaamor
phpBB 3.0.2
Сообщения: 2081
Стаж: 11 лет 11 месяцев
Откуда: Одесса
Благодарил (а): 707 раз
Поблагодарили: 161 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение romaamor »

Добрый день. После установки этого мода ( Установку перепроверил ), и после загрузки любого вложения, страница перезагружается пустой. Что может быть ?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение Татьяна5 »

romaamor, ошибка в установке или конфликт с другим модом
Что пишет дебаг? Что в логах сервера?
Аватара пользователя
romaamor
phpBB 3.0.2
Сообщения: 2081
Стаж: 11 лет 11 месяцев
Откуда: Одесса
Благодарил (а): 707 раз
Поблагодарили: 161 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение romaamor »

Татьяна5 писал(а):Что пишет дебаг? Что в логах сервера?
Как бы ругается на ошибку в шаблоне constants.php
[Wed Jun 18 13:47:08 2014] [error] [client 95.111.239.16] PHP Notice: Constant THANKS_TABLE already defined in /home/vladr546/domains/satray.ru/public_html/includes/constants.php on line 326, referer: http://satray.ru/
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение Татьяна5 »

romaamor писал(а):Constant THANKS_TABLE already defined
Это из мода thanks for post
Сколько у вас в /includes/constants.php строк с THANKS_TABLE? Должна быть одна
Аватара пользователя
romaamor
phpBB 3.0.2
Сообщения: 2081
Стаж: 11 лет 11 месяцев
Откуда: Одесса
Благодарил (а): 707 раз
Поблагодарили: 161 раз
Контактная информация:

Re: [Beta] Водяной знак на вложенные изображения

Сообщение romaamor »

Прописано дважды

Код: Выделить всё

define('THANKS_TABLE', $table_prefix . 'thanks');
Закрыто

Вернуться в «Бета-версии модов для phpBB 3.0.x»