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

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

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

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

Сообщение xalexz »

Всем привет!

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

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

Сообщение Shredder »

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

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

[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);
		}
Каждый этап можно делать не зависимо, т.е. выбрать именно то что вам нужно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Anvar 12.10.2014 6:52, всего редактировалось 3 раза.
Не пишите вопросы лично, если можете задать их на форуме!
Спецзаказы не интересуют!
Anvar
Former team member
Сообщения: 1964
Стаж: 16 лет 5 месяцев
Благодарил (а): 67 раз
Поблагодарили: 800 раз

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

Сообщение Anvar »

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

Пока не решал эту проблему, разместил по разным углам.
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 12 лет 4 месяца
Поблагодарили: 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
Стаж: 16 лет 5 месяцев
Благодарил (а): 12 раз

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

Сообщение deamon739 »

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

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

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

$water = imagecreatefrompng('images/watermark.png');
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 12 лет 4 месяца
Поблагодарили: 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
Стаж: 16 лет 5 месяцев
Благодарил (а): 12 раз

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

Сообщение deamon739 »

kolu4iy при использовании автоматического ресайза водяного знака при заливке фото через tapatalk, выдается ошибка - jpg не поддерживается для установки водяного знака (
kolu4iy
phpBB 1.0.0
Сообщения: 4
Стаж: 12 лет 4 месяца
Поблагодарили: 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
Стаж: 16 лет 5 месяцев
Благодарил (а): 12 раз

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

Сообщение deamon739 »

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

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

Вернул код как было изначально, т.е. убрал авторесайз ватермарка. На данный момент этот ресайз не критичен.
Но спасибо за отклик.
Аватара пользователя
romaamor
phpBB 3.0.7-PL1
Сообщения: 2517
Стаж: 14 лет 5 месяцев
Откуда: Одесса
Благодарил (а): 829 раз
Поблагодарили: 214 раз

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

Сообщение romaamor »

Добрый день. После установки этого мода ( Установку перепроверил ), и после загрузки любого вложения, страница перезагружается пустой. Что может быть ?
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 13158
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

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

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

romaamor, ошибка в установке или конфликт с другим модом
Что пишет дебаг? Что в логах сервера?
Аватара пользователя
romaamor
phpBB 3.0.7-PL1
Сообщения: 2517
Стаж: 14 лет 5 месяцев
Откуда: Одесса
Благодарил (а): 829 раз
Поблагодарили: 214 раз

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
Поддержка
Поддержка
Сообщения: 13158
Стаж: 15 лет 1 месяц
Благодарил (а): 236 раз
Поблагодарили: 3750 раз

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

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

romaamor писал(а):Constant THANKS_TABLE already defined
Это из мода thanks for post
Сколько у вас в /includes/constants.php строк с THANKS_TABLE? Должна быть одна
Аватара пользователя
romaamor
phpBB 3.0.7-PL1
Сообщения: 2517
Стаж: 14 лет 5 месяцев
Откуда: Одесса
Благодарил (а): 829 раз
Поблагодарили: 214 раз

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

Сообщение romaamor »

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

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

define('THANKS_TABLE', $table_prefix . 'thanks');

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