Создание миниатюр по мере необходимости (thumb_*)

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.

Создание миниатюр по мере необходимости (thumb_*)

Сообщение ZhAN 19.07.2008 21:25

Возникла собственно проблема после конвертации - отстутствие уменьшенных изображений.
Судя по коду ПХПбб3 он формирует уменьшенное изображение лишь по время его добавления/сохранения.
Возникло желание уговорить пхпбб формировать уменьшенное изображение в случае его отсутствия на лету.

После этой модификации когда пхпбб пытается показать уменьшенную картинку и ее нету - происходит попытка ее создать заново.
Как вариант использования этого мода - после изменения в админке "Сообщения - настройки вложений - Максимальная ширина миниатюр" достаточно просто удалить файлы thumb_* из папки files. Они будут созданы с новыми параметрами по мере просмотра их пользователями форума.

Код: Выделить всё
#-----[ OPEN ]-----
download/file.php

#-----[ FIND ]-----
   if (!@file_exists($filename))
      {
         trigger_error($user->lang['ERROR_NO_ATTACHMENT'] . '<br /><br />' . sprintf($user->lang['FILE_NOT_FOUND_404'], $filename));

#-----[ BEFORE, ADD ]-----
   if (!@file_exists($filename) && substr($attachment[physical_filename],0,6) == 'thumb_')
   {
      $image_file = substr($attachment[physical_filename],6);
      include_once("../includes/functions_posting.php");
      if (! create_thumbnail($phpbb_root_path . $upload_dir . '/' . $image_file, $filename, ''))
      { // disable thumbnail
         $db->sql_query('UPDATE ' . ATTACHMENTS_TABLE . ' SET thumbnail = 0 WHERE attach_id = ' . $attachment['attach_id']);
      };
   };
#-----[ SAVE/CLOSE ALL FILES ]-----


Итак чтобы пересоздать миниатюры (скажем после изменения максимальной ширины) нужно:
1. убрать старые миниатюры files/thumb_*
2. выставить флаг использования миниатюр для всех графических файлов:
Код: Выделить всё
UPDATE phpbb_attachments SET thumbnail = 1 WHERE extension IN ('jpg','jpeg','gif','png','tiff')

или если правильно заполнено mimetype
Код: Выделить всё
UPDATE phpbb_attachments SET thumbnail = 1 WHERE mimetype LIKE 'image/%'



Добавлено спустя 7 минут 18 секунд:
Также я обратил внимание на откровенно плохое качество масштабирования миниатюр (я использую imagick). Как решение предлагаю следующее:
Код: Выделить всё
#-----[ OPEN ]-----
includes/functions_posting.php

#-----[ FIND ]-----
      @passthru(escapeshellcmd($config['img_imagick']) . 'convert' . ((defined('PHP_OS') && preg_match('#^win#i', PHP_OS)) ? '.exe' : '') . ' -quality 85 -antialias -sample  ' . $new_width . 'x' . $new_height . ' "' . str_replace('\\', '/', $source) . '" +profile "*" "' . str_replace('\\', '/', $destination) . '"');

#-----[ REPLACE ]-----
      @passthru(escapeshellcmd($config['img_imagick']) . 'convert' . ((defined('PHP_OS') && preg_match('#^win#i', PHP_OS)) ? '.exe' : '') . ' -quality 85 -antialias -resize ' . $new_width . 'x' . $new_height . ' "' . str_replace('\\', '/', $source) . '" +profile "*" "' . str_replace('\\', '/', $destination) . '"');

#-----[ SAVE/CLOSE ALL FILES ]-----


Короче вместо -sample использовать -resize. Да это намного более ресурсоемкая процедура.. но она выполняется лишь единожды при создании миниатюры.
Последний раз редактировалось ZhAN 23.07.2008 12:19, всего редактировалось 4 раз(а).
Аватара пользователя
ZhAN
phpBB 1.2.1
 
Сообщения: 23
Зарегистрирован: 11.07.2008 16:07
Откуда: Киев
Предупреждения: 1

Re: Создание миниатюр по мере необходимости (thumb_*)

Сообщение FladeX 19.07.2008 21:37

Спасибо большое!
Во время конвертации не получилось обработать аттачи, поэтому миниатюр не создалось. Надеюсь, данный мод решит проблему.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
Интеграция phpBB 3.0.0 и Slaed 2.5 lite
Сверстал стилей для phpBB: 2
Аватара пользователя
FladeX
phpBB 2.0.18
 
Сообщения: 1148
Зарегистрирован: 02.06.2007 23:44
Откуда: Саранск

Re: Создание миниатюр по мере необходимости (thumb_*)

Сообщение ZhAN 19.07.2008 22:36

Вижу потенциальную проблему. Думаю как решить.
Изменение в админке "Максимальная ширина миниатюр" никак не влияет на то какие из существующих аттачей будет показаны как миниатюры а какие без уменьшения. Из этого следуют следующие проблемы:

Возможна ситуация когда картинка шириной скажем 400 пикселей была загружена в момент когда макс ширина была 480 (соответственно эта картинка при загрузке отметилась как "без миниаютры"). Если в админке теперь уменьшить "Максимальная ширина миниатюр" - миниатюра для этого файла всеравно не создастся (так как в базе стоит флаг нет миниатюры).

Возможна и обратная ситуация (намного худшая), когда картинка размером скажем шириной 300px была загружена во время действия "макс ширина" - 400 и была создана миниатюра (и выставлен соответствующий флаг в базе), теперь если уменьшить "макс ширину" скажем до 200, и удалить thumb_ для пересоздания.. - картинка вообще не будет показываться.. так как пхпбб пытается показывать ее через миниатюру.. а миниатюра не создается так как размеры картинки меньше размеров миниатюры.

Добавлено спустя 54 минуты 7 секунд:
ZhAN писал(а):Вижу потенциальную проблему.

Код
Код: Выделить всё
create_thumbnail($phpbb_root_path . $upload_dir . '/' . $image_file, $filename, ''))

заменил на
Код: Выделить всё
if (! create_thumbnail($phpbb_root_path . $upload_dir . '/' . $image_file, $filename, ''))
{ // if fail disable thumbnail
   $db->sql_query('UPDATE ' . ATTACHMENTS_TABLE . ' SET thumbnail = 0 WHERE attach_id = ' . $attachment['attach_id']);
};

В первом сообщении тоже внес эти изменения.
Если создание миниатюры не получилось - снимается соответствующий флаг и при следующем показе каринка будет показана оригинальным размером.

Т.е. теперь смело можно включать thumbnail = 1 для всех графических файлов, в случае проблемы создания миниатюры - флаг автоматом снимается.
Аватара пользователя
ZhAN
phpBB 1.2.1
 
Сообщения: 23
Зарегистрирован: 11.07.2008 16:07
Откуда: Киев
Предупреждения: 1

Re: Создание миниатюр по мере необходимости (thumb_*)

Сообщение Faust 28.07.2008 11:47

Идея очень хорошая... мод оооочень нужный!!!
Вопрос только вот в чём:
Начал ставить мод, первая строчка :
#-----[ OPEN ]-----
download/file.php
У меня нету ни диры download/
Ну и соответственно файла file.php
:roll:
непонял...
Вроде версия форума совподает...
чёта я совсем непонимаю...
Faust
phpBB 1.0.0
 
Сообщения: 1
Зарегистрирован: 28.07.2008 11:36

Re: Создание миниатюр по мере необходимости (thumb_*)

Сообщение Gorbushka 29.07.2008 14:13

У тебя точно phpBB 3 ???
Начинаю свой долгий путь в сфере интернет-программирования, имею проблемы с орфографией. Остальное узнаете, кому интересно будет)))
Аватара пользователя
Gorbushka
phpBB 2.0.1
 
Сообщения: 127
Зарегистрирован: 30.08.2007 22:46
Откуда: Россия/Москва


Вернуться в Для авторов (phpBB 3.0.x)

Кто сейчас на конференции

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