Уменьшение больших изображений

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
SergeiS
phpBB 1.4.4
Сообщения: 157
Зарегистрирован: 20 лет 3 месяца
Откуда: Эстония
Благодарил (а): 30 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение SergeiS »

попробую вернуть разговор к моду имевшему место в 2.x UploadPic
или здесь http://www.phpbb.com/community/viewtopi ... 5&t=381282
просто и эффективно работал.
Очень хочется иметь подобную функциональность в 3.x, возможно совмещенную с ресайзом и внешних картинок, например с помощью Highslide.
Желающих получить такой функционал огромное количество, достаточно почитать форумы как разработчиков так и пользователей.
Отсутствие подобной опции представляет собой серьезную проблему удобства пользования Phpbb, особенно на форумах где собираются люди не обладающими азами компьютерной грамотности и подготовка картинок своими руками представляет для них серьезную, зачастую нерешаемую проблему. После перехода на 3.x на своем форуме резко упало количество сообщений с фотоотчетами, посетители не скрывают что они не хотят связываться или элементарно не справляются со сложным для них процессом переделки картинок... Открывать загрузку тяжелых картинок на сервер тоже не выглядит разумным по целому набору причин.
Аватара пользователя
SergeiS
phpBB 1.4.4
Сообщения: 157
Зарегистрирован: 20 лет 3 месяца
Откуда: Эстония
Благодарил (а): 30 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение SergeiS »

Нашел для себя отлично работающее решение, проверено на 3.08:
Open includes / functions_upload.php

Find

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

move_file function ($ destination, $ overwrite = false, $ skip_image_check = false, $ chmod = false)
Add before

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

/**
    * Resize images with the true diemensions (800*600)
    */
    function resize_images()
    {
       if ( $this->is_image() ) {
       $limite_largeur = "800px";
       $limite_hauteur = "600px";
       $size = getimagesize($this->destination_file);
       $largeur = $size[0];
       $hauteur = $size[1];
       if($hauteur > $limite_hauteur OR $largeur > $limite_largeur)
       {
       if($largeur > $limite_largeur)
       {
       $hauteur = $hauteur / ($largeur / $limite_largeur);
       $largeur = $limite_largeur;
       }
       if($hauteur > $limite_hauteur)
       {
       $largeur = $largeur / ($hauteur / $limite_hauteur);
       $hauteur = $limite_hauteur;
       }
       
       $destination = imagecreatetruecolor($largeur, $hauteur);
       if ( $this->extension == "jpg" || $this->extension == "jpeg" ) $source = imagecreatefromjpeg($this->destination_file);
       elseif ( $this->extension == "png" ) $source = imagecreatefrompng($this->destination_file);
       elseif ( $this->extension == "gif" ) $source = imagecreatefromgif($this->destination_file);
                
       imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur, $hauteur, $size[0], $size[1]);
       if ( $this->extension == "jpg" || $this->extension == "jpeg" ) imagejpeg($destination, $this->destination_file);
       elseif ( $this->extension == "png" ) imagepng($destination, $this->destination_file);
       elseif ( $this->extension == "gif" ) imagegif($destination, $this->destination_file);
       }
    }
    }
Find

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

if (sizeof ($ this-> error)) 
         { 
            return false; 
         }          phpbb_chmod ($ this-> destination_file, $ chmod);
Add Before

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

if ( $this->is_image() )
            {
                $this->resize_images();
            }
Вы можете задать другой размер, изменив значения в
$ limite_largeur = "800px";
$ limite_hauteur = "600px";
Взято отсюда: http://phpbb3.pytalhost.com/viewtopic.p ... 89&start=0

1) Убедитесь что у вас установлена библиотека GD Странная проблема с imagecreatetruecolor
2) Выделите под PHP ~96-128mb памяти
3) В настройках php прверьте значения post_max_size, upload_max_filesize
4) В настройках форума проверьте параметры максимального веса аттачмента и максимальное разрешение картинок.

Обьединив с Highslide, получаем достаточно красивый и удобный функционал. Посмотреть можно здесь: http://www.striborg.ee/forum/viewtopic. ... 97#p135606

Тестовый аккоунт:

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

test23
test23
P.S. единственное чего не хватает для моих запросов это возможности добавить простенький, текстовый watermark где-нибудь в углу фотографии. Помощь приветствуется ;)
Последний раз редактировалось SergeiS 29.07.2011 9:02, всего редактировалось 1 раз.
romeo_piter
phpBB 2.0.22
Сообщения: 1375
Зарегистрирован: 17 лет 5 месяцев
Благодарил (а): 260 раз
Поблагодарили: 32 раза

Re: Уменьшение больших изображений

Сообщение romeo_piter »

Про ватермарк тут же есть: Уменьшение больших изображений

Проблема только в том, что он лепится только на изображение после ресайза, т.е. если ресайза не было - не будет ватермарка.
Аватара пользователя
SergeiS
phpBB 1.4.4
Сообщения: 157
Зарегистрирован: 20 лет 3 месяца
Откуда: Эстония
Благодарил (а): 30 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение SergeiS »

Спасибо, посмотрю. Большая часть картинок все-таки проходит через ресайз. А на маленькие картинки лучше (ИМО) и не лепить watermark.

Поигрался настройками, вполне приличный результат. Спасибо.
Последний раз редактировалось SergeiS 29.07.2011 9:03, всего редактировалось 1 раз.
Аватара пользователя
Alexandr_Sergeevich
phpBB 1.4.1
Сообщения: 48
Зарегистрирован: 16 лет 1 месяц
Благодарил (а): 10 раз
Поблагодарили: 3 раза

Re: Уменьшение больших изображений

Сообщение Alexandr_Sergeevich »

Подскажите на версии 3.0.9 тоже работает этот хак.

Все делаю как написано в инструкции, проверил все пункты 1, 2, 3, 4. В четвертом поставил максимальный размер веса аттачмента 5mb и максимальное разрешение картинок 4000 х 4000px

Загружаю на форуме картинку с помощью вложения, картинка загружается, обновляется страница и ... появляется надпись "Удаленный сервер или файл не найден".

Кто подскажет, в чем я ошибся? Или хак не подходит для версии 3.0.9?

Добавлено спустя 1 час 46 минут 38 секунд:
Разобрался, лучше устанавливать хак по этой документации, пробовал ставить по инструкции которая на этом форуме не получается, постоянно выскакивает "Удаленный сервер или файл не найден". На версии phpBB 3.0.9 работает! ;)
sweetah
phpBB 2.0.6
Сообщения: 506
Зарегистрирован: 16 лет 7 месяцев
Благодарил (а): 108 раз
Поблагодарили: 26 раз

Re: Уменьшение больших изображений

Сообщение sweetah »

Хороший скрипт. Единственный минус - жпег сохраняется очень сильно ужатым, качество страдает. Где можно подкрутить? В самом коде не вижу. GD вообще как-то настраивается?
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 16 лет 3 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение Vova_OB »

Вопрос на засыпку!!!!

вот инструкция отлично работает http://phpbb3.pytalhost.com/viewtopic.p ... 89&start=0

Как в заменить цифры размеров на подгрузку этих цифр из бд ?

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

$limite_largeur = "800px";
$limite_hauteur = "600px";
как 800 заменить на $config['img_max_width'] ?
как 600 заменить на $config['img_max_height'] ?
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Зарегистрирован: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Уменьшение больших изображений

Сообщение Pazh »

найти

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

 if ( $this->is_image() ) {
добавить перед

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

global $config;
Заменить

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

$limite_largeur = "800px";
$limite_hauteur = "600px";
на

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

$limite_largeur =$config['img_max_width'];
$limite_hauteur = $config['img_max_height'];
Помощь в ЛС/email только за WM или ЮMoney
NeSlava
phpBB 1.2.1
Сообщения: 22
Зарегистрирован: 15 лет 7 месяцев
Откуда: Обнинск
Благодарил (а): 8 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение NeSlava »

Как-то разбирался с ресайзом на чужом форуме. Прочитал этот топик, протестил на своем локальном форуме. Полез на другой форум ставить, а там стоял Advanced BBCode Box 3. Все просто надо было настроить в админке.
Как один из вариантов, думаю, тоже подайдет!
sweetah
phpBB 2.0.6
Сообщения: 506
Зарегистрирован: 16 лет 7 месяцев
Благодарил (а): 108 раз
Поблагодарили: 26 раз

Re: Уменьшение больших изображений

Сообщение sweetah »

NeSlava, там не затрагивается сам файл физически. Скрипт просто уменьшает картинку визуально, но файл остается с таким же весом и разрешением.
Аватара пользователя
SergeiS
phpBB 1.4.4
Сообщения: 157
Зарегистрирован: 20 лет 3 месяца
Откуда: Эстония
Благодарил (а): 30 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение SergeiS »

sweetah писал(а):Хороший скрипт. Единственный минус - жпег сохраняется очень сильно ужатым, качество страдает. Где можно подкрутить? В самом коде не вижу. GD вообще как-то настраивается?
Посмотрите здесь, возможно наведет на мысли http://php.about.com/od/advancedphp/ss/ ... nail_3.htm

Но если это вы пробовали выкладывать тестовую картинку, то проблема в вашей оригинальной фотографии - сдернули в момент снимка, фокус отсутствует. Посмотрите в тестовом форуме другие картинки с нормальным фокусом.
Например вот это сжато в три раза по разрешению от оригинала, причем фокус тоже не идеален: Линк
sweetah
phpBB 2.0.6
Сообщения: 506
Зарегистрирован: 16 лет 7 месяцев
Благодарил (а): 108 раз
Поблагодарили: 26 раз

Re: Уменьшение больших изображений

Сообщение sweetah »

SergeiS, не понял при чем здесь фокус. Я говорю о качестве, в котором сохраняется jpg. На глаз оно примерно 50%. И по очень маленькому весу конечной фотографии можно понять. И на вашем фото видны артефакты компрессии. Попробуйте в качестве эксперимента взять качественную фотографию (или даже лучше иллюстрацию с большим количеством крупных деталей - виднее будет) и ресайзнуть её в фотошопе и сохранить в максимальном качестве. Потом с помощью скрипта проделать то же самое (главное чтоб разрешение совпадало). И сравните результаты :)
Да чего я распинаюсь - пощелкайте две картинки туда-обратно.
http://i26.fastpic.ru/big/2011/0729/6b/ ... 7b786b.jpg
http://i26.fastpic.ru/big/2011/0729/35/ ... 4dbb35.jpg

За ссылку спасибо, мысли появились, но скрипт доделать не получилось. Пробовал вставлять imagejpeg($destination, null, 100);
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Зарегистрирован: 16 лет 3 месяца
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение Vova_OB »

Вопрос по этому скрипту :
http://phpbb3.pytalhost.com/viewtopic.p ... 89&start=0

Он как нагружает сервер?
Он обрабатывает фотки во время загрузки на ПК или на Сервере?
Аватара пользователя
SergeiS
phpBB 1.4.4
Сообщения: 157
Зарегистрирован: 20 лет 3 месяца
Откуда: Эстония
Благодарил (а): 30 раз
Поблагодарили: 8 раз

Re: Уменьшение больших изображений

Сообщение SergeiS »

Да вроде практически не нагружает сервер, только требует побольше памяти под PHP.
Это физическое уменьшение файлов картинок на сервере. То есть оригинальный файл размером в 5000 пикселей и весом в несколько мегабайт будет преобразован на сервере во время upload в файл размером 1200 пикселей и весом в сотни килобайт и уже только в таком виде будет сохранен на сервере.
Аватара пользователя
Змей_24
phpBB 1.0.0
Сообщения: 9
Зарегистрирован: 15 лет 8 месяцев
Откуда: Красноярск
Благодарил (а): 3 раза
Поблагодарили: 1 раз

Re: Уменьшение больших изображений

Сообщение Змей_24 »

Доброго !
Всех с наступившим ... ;)

При попытке использования хака для ресайзинга получаю ошибку:
[phpBB Debug] PHP Notice: in file /includes/functions_upload.php on line 268: getimagesize() [function.getimagesize]: Filename cannot be empty
Помогите пожалуйста ее исправить.

Стиль: subsilver2
Версия phpBB: 3.0.5

п.с. прошу прощения за вопросы по не актуальной версии ...
С уважением, Сергей.

Вернуться в «Запросы модов для phpBB 3.0.x»