Почти все форумы сталкиваются с тем, что приходится как-то ограничивать своих пользователей в размерах загружаемых фотографий. Серверы то не резиновые и за место на них приходится платить.
Вот и я столкнулся с этой проблемой. Не то, чтобы я раньше не ограничивал размер загружаемых картинок. Безусловно в админке форума phpBB можно выставить максимально допустимый размер и вес картинок. Но, согласитесь, не каждый пользователь форума готов и может самостоятельно уменьшать свои фото с 5-7 Мб до 300-500 кБ для загрузки на форум.
От этого страдают все: и пользователь, и сам форум. Вот бы сделать так, чтобы человек загружал на форум фото размером 3 Мб, а на сервере оно уменьшалось до 50 Кб. Фантастика?.. Отнюдь! 🙂
А всего-то надо внести небольшие изменения в файл …/includes/functions_upload.php вашего форума.
1. Найдите в нем следующие строки:
1 2 |
phpbb_chmod($this->destination_file, $chmod); } |
Добавьте после них:
1 |
$this->resize(); |
2. Найдите далее:
1 2 |
return true; } |
Добавьте после:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
function resize(){ global $config; if (!empty($config['img_max_width']) && !empty($config['img_max_height'])){ $max_width = $config['img_max_width']; $max_height = $config['img_max_height']; }else{ $max_width = 800; $max_height = 600; } if (!empty($max_width) && !empty($max_height)){ $filename = $this->destination_file; if ($image_info = @getimagesize($filename)){ $image_width = $image_info[0]; $image_height = $image_info[1]; $image_type = $image_info[2]; if (($image_width > $max_width) || ($image_height > $max_height)){ $ratio = $image_width / $image_height; $w_scale = $max_width / $image_width; $h_scale = $max_height / $image_height; if ($w_scale <= $h_scale){ $width = $max_width; $height = round($width / $ratio); if ($height > $max_height) $height = $max_height; }else{ $height = $max_height; $width = round($height * $ratio); if ($width > $max_width) $width = $max_width; } if ($image_type == IMAGETYPE_JPEG){ $image = imagecreatefromjpeg($filename); }elseif ($image_type == IMAGETYPE_GIF){ $image = imagecreatefromgif($filename); }elseif ($image_type == IMAGETYPE_PNG){ $image = imagecreatefrompng($filename); }else{ return; } $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height); $image = $new_image; if ($image_type == IMAGETYPE_JPEG){ imagejpeg($image, $filename, 80); }elseif ($image_type == IMAGETYPE_GIF){ imagegif($image, $filename); }elseif ($image_type == IMAGETYPE_PNG){ imagepng($image, $filename); } } } } } |
Все. Не забудьте сохранить файл в кодировке utf-8 (без BOM) и обновить кэш форума на главной странице администраторского раздела.
По умолчанию картинки автоматически уменьшаются до 800 пикселей по ширине и 600 пикселей по высоте. Вы также можете задать свои размеры в соответствующем разделе админки (Сообщения > Настройки вложений).
Как я и писал выше, картинка размером более 3 Мб уменьшается при загрузке до 50 кБ.
Остается только отметить автора данной модификации для форума phpBB – Виталия Кима - https://vk-site.by/ . Большое ему спасибо!
Спасибо за руководство. Есть небольшой форум с ограниченым дисковым пространством и срашно видеть как за два дня половина из него заполняеться непонятно чем.
А почему бы просто не поставить ограничение на размер фото, как делают на многих ресурсах?
В том то и дело, Наталья, если мы поставим ограничение на размер загружаемых фото, пользователям придется самим обрабатывать свои фото перед загрузкой. А это далеко не всем по зубам. Даже онлайн сервисы по уменьшению размеров фото могут оказаться сложными для некоторых людей. Я уже не говорю о Фотошопе.
Чем проще загрузить человеку фото на форум, тем лучше.
Ну может и так, конечно. Но, когда ты сам готовишь фото к загрузке, то смотришь, что бы цвета были на месте и корректно отражались. А то вон, вконтакте.. Грузишь фото (условно)большого размера, алгоритмы его уменьшают, но так, что фото не узнать потом- все цвета “поплыли”. Да и народ, мне кажется, уже привык к тому, что нужно уменьшать размеры. Можно тут же и ФШ- онлайн прикрутить,и научить, как обработать и уменьшить. Там ведь не сложно.
Для меня так это вообще проще пареной репы 🙂 Фото обработать в ФШ – делов на 1 минуту..
Но есть сообщества, в которых основная аудитория более чем на “вы” с интернетом и с компьютером. Их научили заходить на форум и писать сообщения, и все. Я вон даже на форуме делал фото-инструкцию “Как уменьшить фото” – бесполезно.
Людям нужна кнопка – “Уменьшить и загрузить фото”. 🙂