info navigation

phpbb-belk.ru

темы, связанные с форумом phpbb 3.0.x



Новая тема  [ Сообщений: 2 ]  Просмотры: 3890

Автор Сообщение
Не в сети
(Дмитрий)  
Аватара пользователя

Стаж: 7 лет 10 месяцев 28 дней
Сообщения: 741


Стиль: prosilver


Репутация: 15




Тиц и PR

перейти на сайт пользователя
Найти темы пользователя


Очень актуальная проблема.
Например в админке выставлено не более 1 Метра (вес), размеры 1024 на 768.
Если эти размеры, и, что самое важное вес больше, то форум отфутболивает пользователя. А ему это очень неприятно. :(
Уже видел такие оптимизации.
Вот хак по размерам, вроде он:
https://www.phpbb.com/community/viewtop ... &t=1497795
из этой темы: https://www.phpbbguru.net/community/vie ... 23&t=18325
а по весу, пока не нашел :(

Добавлено спустя 10 минут 56 секунд:
Вот еще, но как уменьшить вес!? Непонятно :?
https://www.phpbbguru.net/community/vie ... 52#p419796


Upload image resizer phpbb,Автосжимание загружаемого на форум изображения,уменьшение веса и размеров изображения
Не в сети
(Андрей)  
Администратор
Аватара пользователя

Стаж: 9 лет 2 месяца 19 дней
Сообщения: 1235
Откуда: здешние мы


Стиль: subsilver2


Репутация: 11


Russia

Тиц и PR

перейти на сайт пользователя
Найти темы пользователя


Upload image resizer


Откликаясь на поиски пользователя (чтобы усилия не пропали зря) решил потестировать предлагаемый ресайзер отсюда: https://www.phpbbguru.net/community/viewtopic.php?t=40952#p469157

так как я не создаю темы, не проверив работоспособность модификации - пришлось самому поставить.
итог: модификация очень проста, не требует закачки никаких файлов на форум и хорошо работает.

Вложение:
resaizer.png
resaizer.png [ 39.19 КБ | Просмотров: 3886 ] resaizer.png



какие форматы файлов сие переваривает - неизвестно. протестировал на .jpeg - работает.
в настройках поставил качество jpeg 50%, остальное не менял.
взял исходный файл 1600х1200 и весом 219 kb,
после загрузки на форум скачал получившийся файл - теперь он стал 1024х768 и весом 26,5 kb

то есть ресайзер работает точно. и изменяет размеры и вес физически.

Необходимые правки файлов (стили не затрагиваются, поэтому - универсально):

Открыть includes/functions_upload.php
Найти

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

         phpbb_chmod($this->destination_file, $chmod);


Вставить перед найденным

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

// Start Image Resize -->
         if ($this->is_image())
         {
            $this->resize_images();
         }
// --> End Image Resize


Найти

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

      return true;
   }


Вставить после найденного

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

// Start Image Resize -->
   /**
   * Resize images with the true diemensions
   * version 1.0.0b
   */
   function resize_images()
   {
      global $config;
      if ($this->is_image() && isset($config['allow_resize_img']) && $config['allow_resize_img'])
      {
         $limit_width =   (isset($config['max_image_width'])) ? $config['max_image_width'] : 1024;
         $limit_height =   (isset($config['max_image_height'])) ? $config['max_image_height'] : 768;
         $quality =      (isset($config['max_image_quality'])) ? $config['max_image_quality'] : 100;

         $size = getimagesize($this->destination_file);
         $width = $size[0];
         $height = $size[1];
         if($height > $limit_height || $width > $limit_width)
         {
            $int_factor = min(($limit_width / $width), ($limit_height / $height));
            $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', true);
                  $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;
         }
      }
   }
// --> End Start Image Resize


Открыть includes/acp/acp_attachments.php
Найти

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

                  'img_link'               => array('lang' => 'IMAGE_LINK_SIZE',      'validate' => 'int',   'type' => 'dimension:3:4', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),


Вставить после найденного

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

// Start Image Resize -->
                  'allow_resize_img'         => array('lang' => 'ALLOW_RESIZE_IMG',      'validate' => 'bool',   'type' => 'radio:yes_no', 'explain' => true),
                  'max_image_width'         => array('lang' => 'MAX_IMAGE_WIDTH',      'validate' => 'int',   'type' => 'custom', 'method' => 'max_image_width', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
                  'max_image_height'         => array('lang' => 'MAX_IMAGE_HEIGHT',      'validate' => 'int',   'type' => 'custom', 'method' => 'max_image_height', 'explain' => true, 'append' => ' ' . $user->lang['PIXEL']),
                  'max_image_quality'         => array('lang' => 'MAX_IMAGE_QUALITY',      'validate' => 'int',   'type' => 'custom', 'method' => 'max_image_quality', 'explain' => true, 'append' => ' ' . $user->lang['PERCENT']),
// -- End Image Resize


Найти

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

      return h_radio('config[' . $key . ']', $radio_ary, $value, $key);
   }


Вставить после найденного

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

// Start Image Resize -->
   function max_image_width($value, $key = '')
   {
      global $config;
      $value = (isset($config['max_image_width'])) ? $config['max_image_width'] : 1024;
      return '<input type="text" id="' . $key . '" size="8" maxlength="15" name="config[' . $key . ']" value="' . $value . '" />';
   }

   function max_image_height($value, $key = '')
   {
      global $config;
      $value = (isset($config['max_image_height'])) ? $config['max_image_height'] : 768;
      return '<input type="text" id="' . $key . '" size="8" maxlength="15" name="config[' . $key . ']" value="' . $value . '" />';
   }

   function max_image_quality($value, $key = '')
   {
      global $config;
      $value = (isset($config['max_image_quality'])) ? $config['max_image_quality'] : 100;
      return '<input type="text" id="' . $key . '" size="3" maxlength="15" name="config[' . $key . ']" value="' . $value . '" />';
   }
// --> End Image Resize


Языковые правки:

Открыть language/en/acp/attachments.php
Найти

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

   'UPLOAD_NOT_DIR'            => 'The upload location you specified does not appear to be a directory.',


Вставить после найденного

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

// Start Image Resize -->
   'ALLOW_RESIZE_IMG'            => 'Enable reduce image',
   'ALLOW_RESIZE_IMG_EXPLAIN'      => 'If enabled, the downloaded images will be proportionally reduced in width or height, depending on the settings specified below.',
   'MAX_IMAGE_WIDTH'            => 'Limit the maximum width of images',
   'MAX_IMAGE_WIDTH_EXPLAIN'      => 'Images width will be reduced to the size specified here.',
   'MAX_IMAGE_HEIGHT'            => 'Limit the maximum height of images',
   'MAX_IMAGE_HEIGHT_EXPLAIN'      => 'Images height will be reduced to the size specified here.',
   'MAX_IMAGE_QUALITY'            => 'Maximum reduced image quality',
   'MAX_IMAGE_QUALITY_EXPLAIN'      => 'Reduced image quality will be reduced to a set here.',
   'PERCENT'                  => 'percent (%)',
// --> End Image Resize


Открыть language/ru/acp/attachments.php
Найти

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

   'UPLOAD_NOT_DIR'            => 'Указанный путь для загрузки файлов не является папкой.',


Вставить после найденного

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

// Start Image Resize -->
   'ALLOW_RESIZE_IMG'            => 'Включить функцию уменьшения изображений',
   'ALLOW_RESIZE_IMG_EXPLAIN'      => 'Если включено, то загружаемые изображения будут пропорционально уменьшены по высоте или ширине, в зависимости от настроек, укзанных ниже.',
   'MAX_IMAGE_WIDTH'            => 'Предел максимальной ширины рисунков',
   'MAX_IMAGE_WIDTH_EXPLAIN'      => 'Ширина загружаемых рисунков будет уменьшена до указанного здесь размера.',
   'MAX_IMAGE_HEIGHT'            => 'Предел максимальной высоты рисунков',
   'MAX_IMAGE_HEIGHT_EXPLAIN'      => 'Высота загружаемых рисунков будет уменьшена до указанного здесь размера.',
   'MAX_IMAGE_QUALITY'            => 'Максимальное качество уменьшенного изображения',
   'MAX_IMAGE_QUALITY_EXPLAIN'      => 'Качество уменьшенного изображения будет уменьшено до указанного здесь.',
   'PERCENT'                  => 'процентов (%)',
// --> End Image Resize


Всё. настройки мода находятся по адресу Админка - Сообщения - Настройки вложений.

Удачного применения.


трёхголовый белк семейства рептилоидов:
"три головы - хорошо, на как же трудно придти к согласию..."
Показать сообщения за:  Поле сортировки  
Ответить на тему  [ Сообщений: 2 ] 

Кто сейчас на сайте:

Всего посетителей: 0, из них зарегистрированных: 0, скрытых: 0 и гостей: 0 (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (122) здесь было 19 дек 2023, 12:10

Сейчас этот раздел просматривают: нет зарегистрированных пользователей и гости: 0



Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения
Вы не можете защищать свои темы паролем

Найти:
Перейти:  




cron

Текущее время: 11 дек 2024, 14:47

Создано на основе phpBB® Forum Software © phpBB Group
Яндекс.Метрика

Полная версия Мобильный вид