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

[dev] Upload image resizer

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5270
Стаж: 19 лет 2 месяца
Откуда: Питер
Благодарил (а): 188 раз
Поблагодарили: 800 раз
Контактная информация:

Re: [dev] Upload image resizer

Сообщение Siava »

Новый вариант функции с учётом всех пожеланий выше.
Корректно уменьшает прозрачные png и не совсем корректно прозрачные gif (они становятся чуток больше в килобайтах, это исправим, как только способ найду).

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

    /**
    * Resize images with the true diemensions
    * version 0.31
    */
    function resize_images()
    {
       if ( $this->is_image() )
       {
			$limit_width = 1024;
			$limit_height = 768;
			$quality = 90;
			$size = getimagesize($this->destination_file);
			$width = $size[0];
			$height = $size[1];
			if($height > $limit_height OR $width > $limit_width)
			{
				$int_factor = min(($limit_width / $width), ($limit_height / $height));
				// pano-test add
				// if (max($width, $height) / min($width, $height) > 2) $int_factor = $int_factor * 1.5;
				// end
				$width = round($width * $int_factor);
				$height = round($height * $int_factor);
				$destination = imagecreatetruecolor($width, $height);

				if ( $this->extension == "jpg" || $this->extension == "jpeg" )
				{
					@ini_set('gd.jpeg_ignore_warning', 1);
					$source = imagecreatefromjpeg($this->destination_file);
				}
				elseif ( $this->extension == "png" )
				{
					@imagealphablending($destination, false);
					@imagesavealpha($destination, true);
					$source = imagecreatefrompng($this->destination_file);
				}
				elseif ( $this->extension == "gif" )
				{
					$source = imagecreatefromgif($this->destination_file);
					$trnprt_indx = imagecolortransparent($source);
					if ($trnprt_indx >= 0) //transparent
					{
						$trnprt_color = imagecolorsforindex($source, $trnprt_indx);
						$trnprt_indx = imagecolorallocate($destination, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
						imagefill($destination, 0, 0, $trnprt_indx);
						imagecolortransparent($destination, $trnprt_indx);
					}
				}

				imagecopyresampled($destination, $source, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
				if ( $this->extension == "jpg" || $this->extension == "jpeg" ) imagejpeg($destination, $this->destination_file, $quality);
				elseif ( $this->extension == "png" ) imagepng($destination, $this->destination_file);
				elseif ( $this->extension == "gif" ) imagegif($destination, $this->destination_file);
				imagedestroy($destination);
			}
		}
	}
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Frejer Stolz
phpBB 1.4.2
Сообщения: 54
Стаж: 14 лет 10 месяцев
Благодарил (а): 11 раз
Поблагодарили: 1 раз

Re: [dev] Upload image resizer

Сообщение Frejer Stolz »

Siava писал(а):Набросок мода, автоматического уменьшения загружаемых изображений на сервер.
Может подобное уже выкладывали, в этом варианте исправил масштабирование. Всё работает корректно.

functions_upload.php
найти
Что найти? В какую часть functions_upload.php вставлять?
Вставил туда же, куда вставлялся соседний скрипт (около 260й строки) - ресайз не работает.

Уточни шапку, пожалуйста?
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5270
Стаж: 19 лет 2 месяца
Откуда: Питер
Благодарил (а): 188 раз
Поблагодарили: 800 раз
Контактная информация:

Re: [dev] Upload image resizer

Сообщение Siava »

Frejer Stolz, пардон, в инструкции было напутано чуток, что найти куда вставить. Исправил. Код не трогал, в нём всё ок. Спасибо что заметили :)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Frejer Stolz
phpBB 1.4.2
Сообщения: 54
Стаж: 14 лет 10 месяцев
Благодарил (а): 11 раз
Поблагодарили: 1 раз

Re: [dev] Upload image resizer

Сообщение Frejer Stolz »

Siava, спасибо за скорую реакцию!

Установил по инструкции.

Но, ещё вопросы появились. Мод продолжает не работать.
Установил мод на 3.0.10. Почистил кеш. Загружаю фото. Загрузилась, но перезагрузившаяся страница оказалась с посыпавшимися стилями (текст размером +3). И загруженное фото - полноразмерное, не обрезалось.
Ещё пару фото загрузил - то же самое.

Снёс мод, поставил заново. Почистил кеш - без изменений.


Что-то тут не чисто.



Вот мой исходный functions_upload.php, вроде бы без модов. Проверь, пожалуйста? Очень хочется использовать этот мод.
Вложения
functions_upload.rar
(4.82 КБ) 365 скачиваний
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5270
Стаж: 19 лет 2 месяца
Откуда: Питер
Благодарил (а): 188 раз
Поблагодарили: 800 раз
Контактная информация:

Re: [dev] Upload image resizer

Сообщение Siava »

Да там нет ничего сложного, кеш чистить не обязательно. Вот модифицированный файл.
Вложения
functions_upload.rar
(6.35 КБ) 403 скачивания
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Frejer Stolz
phpBB 1.4.2
Сообщения: 54
Стаж: 14 лет 10 месяцев
Благодарил (а): 11 раз
Поблагодарили: 1 раз

Re: [dev] Upload image resizer

Сообщение Frejer Stolz »

Спасибо за индивидуальный подход, всё работает! :)
Видимо, я где-то ошибся, хотя и перепроверял.
Аватара пользователя
southklad
phpBB 3.1.0 RC2
Сообщения: 3232
Стаж: 12 лет 2 месяца
Благодарил (а): 797 раз
Поблагодарили: 175 раз

Re: [dev] Upload image resizer

Сообщение southklad »

а как отключить сжимание gif и png ??? чтобы только jpg
Изображение
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5270
Стаж: 19 лет 2 месяца
Откуда: Питер
Благодарил (а): 188 раз
Поблагодарили: 800 раз
Контактная информация:

Re: [dev] Upload image resizer

Сообщение Siava »

igorbond

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

    /**
    * Resize images with the true diemensions
    * version 0.31
    */
    function resize_images()
    {
       if ( $this->is_image() )
       {
			$limit_width = 1024;
			$limit_height = 768;
			$quality = 90;
			$size = getimagesize($this->destination_file);
			$width = $size[0];
			$height = $size[1];
			if($height > $limit_height OR $width > $limit_width)
			{
				$int_factor = min(($limit_width / $width), ($limit_height / $height));
				// pano-test add
				// if (max($width, $height) / min($width, $height) > 2) $int_factor = $int_factor * 1.5;
				// end
				$width = round($width * $int_factor);
				$height = round($height * $int_factor);
				$destination = imagecreatetruecolor($width, $height);

				if ( $this->extension == "jpg" || $this->extension == "jpeg" )
				{
					@ini_set('gd.jpeg_ignore_warning', 1);
					$source = imagecreatefromjpeg($this->destination_file);
				}

				imagecopyresampled($destination, $source, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
				if ( $this->extension == "jpg" || $this->extension == "jpeg" ) imagejpeg($destination, $this->destination_file, $quality);
				imagedestroy($destination);
			}
		}
	}
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Slava9
phpBB 2.0.2
Сообщения: 321
Стаж: 15 лет 2 месяца
Откуда: Киев
Благодарил (а): 47 раз

Re: [dev] Upload image resizer

Сообщение Slava9 »

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

Re: [dev] Upload image resizer

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

Мод с поддержкой imagemagick

На последнем шаге добавить (вместо предлагаемого в моде кода)

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

	/**
    * Resize images with the true diemensions
    * version 0.32
    */
    function resize_images()
    {
	   global $config;
	   
       if ( $this->is_image() )
       {
			$limit_width = 1024;
			$limit_height = 768;
			$quality = 90;
			$size = getimagesize($this->destination_file);
			$width = $size[0];
			$height = $size[1];
			if($height > $limit_height OR $width > $limit_width)
			{
				$int_factor = min(($limit_width / $width), ($limit_height / $height));
				// pano-test add
				// if (max($width, $height) / min($width, $height) > 2) $int_factor = $int_factor * 1.5;
				// end
				$resize_width = round($width * $int_factor);
				$resize_height = round($height * $int_factor);
			

                  // Only use imagemagick if defined and the passthru function not disabled
      if ($config['img_imagick'] && function_exists('passthru'))
      {
         $quality = '';
         $sharpen = '';
         $frame = '';
         $animation = '';
         if ( $this->extension == "jpg" || $this->extension == "jpeg" )
         {
            $quality = '-quality 80'; // 80%
            /** Reduction in linear dimensions below which sharpening will be enabled */
            if ( ( $resize_width + $resize_height ) / ( $width + $height ) < 0.85 )
            {
               $sharpen = '-sharpen 0x0.4';
            }
         }
         elseif ($this->extension == "png")
         {
            $quality = '-quality 95'; // zlib 9, adaptive filtering
         }
         elseif ($this->extension == "gif")
         {
            /**
             * Force thumbnailing of animated GIFs above this size to a single
             * frame instead of an animated thumbnail. ImageMagick seems to
             * get real unhappy and doesn't play well with resource limits. :P
             * Defaulting to 1 megapixel (1000x1000)
             */
            if($width * $height > 1.0e6)
            {
               // Extract initial frame only
               $frame = '[0]';
            }
            else
            {
               // Coalesce is needed to scale animated GIFs properly (MediaWiki bug 1017).
               $animation = ' -coalesce ';
            }
         }
         # Specify white background color, will be used for transparent images
         # in Internet Explorer/Windows instead of default black.

         # Note, we specify "-size {$this->width}" and NOT "-size {$this->width}x{$this->height}".
         # It seems that ImageMagick has a bug wherein it produces thumbnails of
         # the wrong size in the second case.

         if (substr($config['img_imagick'], -1) !== '/')
         {
            $config['img_imagick'] .= '/';
         }
         $cmd  =
            escapeshellcmd($config['img_imagick']) . 'convert' . ((defined('PHP_OS') && preg_match('#^win#i', PHP_OS)) ? '.exe' : '') .
            " {$quality} -background white -size {$width} ".
            escapeshellarg($this->destination_file . $frame) .
            $animation .
            // For the -resize option a "!" is needed to force exact size,
            // or ImageMagick may decide your ratio is wrong and slice off
            // a pixel.
            ' -thumbnail ' . escapeshellarg( "{$resize_width}x{$resize_height}!" ) .
            " -depth 8 $sharpen " .
            escapeshellarg($this->destination_file) . ' 2>&1';

         @passthru($cmd);
               
		 return true;
      }
			
				
		    if (extension_loaded('gd'))
            {
				$destination = imagecreatetruecolor($resize_width, $resize_height);

				if ( $this->extension == "jpg" || $this->extension == "jpeg" )
				{
					@ini_set('gd.jpeg_ignore_warning', 1);
					$source = imagecreatefromjpeg($this->destination_file);
				}
				elseif ( $this->extension == "png" )
				{
					@imagealphablending($destination, false);
					@imagesavealpha($destination, true);
					$source = imagecreatefrompng($this->destination_file);
				}
				elseif ( $this->extension == "gif" )
				{
					$source = imagecreatefromgif($this->destination_file);
					$trnprt_indx = imagecolortransparent($source);
					if ($trnprt_indx >= 0) //transparent
					{
						$trnprt_color = imagecolorsforindex($source, $trnprt_indx);
						$trnprt_indx = imagecolorallocate($destination, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
						imagefill($destination, 0, 0, $trnprt_indx);
						imagecolortransparent($destination, $trnprt_indx);
					}
				}

				imagecopyresampled($destination, $source, 0, 0, 0, 0, $resize_width, $resize_height, $size[0], $size[1]);
				if ( $this->extension == "jpg" || $this->extension == "jpeg" ) imagejpeg($destination, $this->destination_file, $quality);
				elseif ( $this->extension == "png" ) imagepng($destination, $this->destination_file);
				elseif ( $this->extension == "gif" ) imagegif($destination, $this->destination_file);
				imagedestroy($destination);
				imagedestroy($source);
			
			return true;
			}
			
			return false;
			}
		}
	}
Аватара пользователя
southklad
phpBB 3.1.0 RC2
Сообщения: 3232
Стаж: 12 лет 2 месяца
Благодарил (а): 797 раз
Поблагодарили: 175 раз

Re: [dev] Upload image resizer

Сообщение southklad »

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

Re: [dev] Upload image resizer

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

igorbond
Можно попробовать так (не проверяла)

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

			$limit_width = 1024;
			$limit_height = 768;
			$quality = 90;
			$size = getimagesize($this->destination_file);
Заменить на

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

			$size = getimagesize($this->destination_file);
			$limit_width = $size[0];
			$limit_height = $size[1];
			$quality = 50;
Аватара пользователя
southklad
phpBB 3.1.0 RC2
Сообщения: 3232
Стаж: 12 лет 2 месяца
Благодарил (а): 797 раз
Поблагодарили: 175 раз

Re: [dev] Upload image resizer

Сообщение southklad »

Не работает, если нет изменения размеров, то и нет уменьшения веса
Изображение
Аватара пользователя
Пчелкин
phpBB 3.3.0
Сообщения: 11234
Стаж: 14 лет 2 месяца
Откуда: fotovideoforum.ru
Благодарил (а): 1782 раза
Поблагодарили: 1340 раз
Контактная информация:

Re: [dev] Upload image resizer

Сообщение Пчелкин »

Кто мешает цифры размеров оставить от установленного в админке (пороги)

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

			$limit_width = 1024;
			$limit_height = 768;
			$quality = 90;
			$size = getimagesize($this->destination_file);
А качество урезать до минимального?
$quality = 90; - $quality = 10;
Тока приготовься к покупке очков для всех юзеров...

Добавлено спустя 1 минуту 49 секунд:
Забыл сказать что будет кропиться тока на последних версиях серверного ИМагика ... на древних просто не сработает...
Аватара пользователя
southklad
phpBB 3.1.0 RC2
Сообщения: 3232
Стаж: 12 лет 2 месяца
Благодарил (а): 797 раз
Поблагодарили: 175 раз

Re: [dev] Upload image resizer

Сообщение southklad »

хотел без уменьшения размера, но придутся все еж с ним
Изображение
Закрыто

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