|
|
Администратор |
|
Стаж: 9 лет 2 месяца 19 дней Сообщения: 1235 Откуда: здешние мы
Стиль: subsilver2
Репутация: 11
перейти на сайт пользователя
Найти темы пользователя
|
Upload image resizerОткликаясь на поиски пользователя (чтобы усилия не пропали зря) решил потестировать предлагаемый ресайзер отсюда: https://www.phpbbguru.net/community/viewtopic.php?t=40952#p469157так как я не создаю темы, не проверив работоспособность модификации - пришлось самому поставить. итог: модификация очень проста, не требует закачки никаких файлов на форум и хорошо работает. Вложение:
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 Найти Вставить после найденного Код: Выделить всё // 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 Всё. настройки мода находятся по адресу Админка - Сообщения - Настройки вложений.Удачного применения.
|
|
трёхголовый белк семейства рептилоидов: "три головы - хорошо, на как же трудно придти к согласию..."
|
|
|
|
|