Ресайз загружаемых изображений на стороне клиента

Грузить на сервер фото в оригинальном размере - мегабайт так на 10 - это лишняя нагрузка на сервер плюс расход места на диске плюс трафик

Хаки, скрипты, BB-коды и другие вещи, не оформленные в виде полноценных модов, но способствующие улучшению функциональности движка.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Есть задача изменения размера изображений на стороне клиента - до загрузки на сервер.

Аргументация:
  • в большинстве случаев незачем выкладывать фото гигантского размера - в 90% случаев хватает 800x600, ИМХО, да и при загрузке можно задавать вопрос - уменьшать или нет (умолчание - да)
  • кроме того, злые хостеры порой не дают возможности использовать ImageMagick, что увеличивает нагрузку на сервер... поэтому такие хостеры не правы))
  • бывают ситуации, когда даже GD отсутствует.
Что-то не нашёл подходящего мода... А ведь идея не нова - например, такое есть для joomla, когда используется FlushUploader, есть и другие решения на javascript. Такой загрузчик можно прикрутить к галерее, обычной загрузке и др.

Какое мнение ?
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

Идея хорошая, но чтобы уменьшать изображения на стороне пользователя - об этом я, честно говоря, впервые слышу. Даже не представляю, как это сделать, надо гуглить.
c61 писал(а):бывают ситуации, когда даже GD отсутствует.
А вот это, по-моему, просто идиотизм. Я тут заморачивался недавно с автоуменьшением аватар на стороне сервера, и в течение нескольких недель поисков мне так и не удалось найти ничего путного для ресайза gif-анимаций, если установлен только GD. Просмотрел кучу библиотек для этого дела, но все они дают тот или иной сбой: то изображение дёргаться начинает, то проблемы с прозрачностью, и т.п. В одной библиотеке (Imagine, если не ошибаюсь) заявляется, что они победили-таки этот GD-ресайз, но там требуется версия PHP не ниже 5.3. И хотя у меня именно 5.3, но по какой-то неведомой причине не заработало ничего - вообще просто не запустилось. В итоге пришлось плюнуть.
Но если даже GD отсутствует - бежать надо скорее от такого хостера.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Ну конечно, без GD никак) Такие хостеры ещё попадаются, к сожалению...

Одна из причин затеи с ресайзом на стороне клиента - до загрузки на сервер - это то, что на слабеньких серверах что GD, что ImageMagick - всё медленное и ресурсов кушает ого-го. А пользователи даже не задумываются: сфотографировали крутейшим фотоаппаратом и эти 10 мегабайт пихают на сервер... Причём на фото какая-то ерундовина. Админа потом достают: чего всё так медленно работает(

Пример ресайза посредством flashupload см. здесь.
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

Если это может быть реализовано только при помощи флэш, то я не поклонник таких методов, т.к. у флэш (в том числе - Flashupload) полно багов: http://demo.swfupload.org/Documentation/#knownissues

Предпочитаю более надёжные решения, пусть и более простые.
А насчёт изображений в 10 Мб - это надо средствами самого форума запрещать, ни к чему баловать юзверей и позволять им такие колдобины грузить. :D

Впрочем, капризность серверов насчёт загрузки изображений я прекрасно знаю и не отрицаю. Положить даже "неплохой" по меркам современного хостинга сервер по моим наблюдениям может фотка всего в 2-3 Мб, так что это и впрямь проблема.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Согласен, с flashuploader не всё гладко.

Однако, есть решения по ресайзу и на javascript, например http://blog.webferia.ru/web/javascript/ ... e-resizer/
"Подводные камни" также имеются))
Из вышеприведенного удалось сделать простенький примерчик. Файл действительно ресайзится и успешно передается на сервер.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Тестовый пример ресайза для проверки на различных браузерах и слабых компах:
resize.zip
(155.03 КБ) 1469 скачиваний
resize.zip
(155.03 КБ) 1469 скачиваний
Инструкции:
  • распаковать архив и переписать содержимое в папку на сервере /resize от корня (если файлы сервера лежат в /www, создать /resize как подпапку в /www)
  • установить права 0777 на папку /resize и все файлы
  • открыть в браузере url: ваш_сервер/resize/r.html
  • попытаться загрузить какие-то файлы jpg (они появятся в папке /resize)
В файле r.html можно изменить параметры:
  • maxSize - максимальный размер результирующего файла в килобайтах
  • maxWidth и maxHeight - максимальные ширина и высота для результрующего файла
  • все эти параметры взаимосвязаны: если, например, для ширины 1024 пиксела окажется, что размерчик файла великоват, картинка будет уменьшена (пропорции должны сохраняться)
Очень интересуют разные браузеры и компы - будет ли везде работать и какое время ресайза с аплоадом...

Предполагается использовать код в следующих целях (если получится):
  • мод простого ресайза на клиенте
  • замена ресайза на сервере для галереи - сразу создавать файлы предпросмотра и др.
Спасибо за внимание))
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

Изображения загружаются на сервер с какой-то кавычкой, и из-за этого в последующем не могут быть открыты.
broken_image.png
Через обычный FTP (использую FTP-commander) на эту штуку после загрузки нельзя никак повлиять, можно удалить только через ISP.
Счастливые обладатели IE (полагаю, что любых версий, хотя я проверял только на 8) могут не рассчитывать на "волшебный ресайз", т.к. "Объект не поддерживает это свойство или метод".
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Забавно, кавычки у меня не наблюдалось))

Ну а с IE вечные проблемы. Вроде начиная с 9 должно работать, ещё проверю.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Ну поскольку с ресайзом на стороне клиента всё не гладко, задумался... и меня посетила такая идейка: а почему бы для ресайза не использовать какой-то халявный сервис ? Яндекс Диск (ЯД) вполне годится, и webdav client есть, не только мною подпиленный, и можно ещё маленько подпилить. Проверил эту идейку и даже сделал мелкий мод - создание миниатюр средствами ЯД вместо выполняющихся на своём сервере imagemagick или GD. В планах - добавить ресайз во время загрузки (приделаю до задаваемого размерчика по ширине).

Поэтому создам попозже новую тему для этого экспериментального мода и переползу туда. А эта наверняка будет развиваться не раньше, чем ослик ИА станет нормальным браузером))

P.S. Пока выложил у себя на тестовой площадке, если есть желание поиграть - вэлкам !
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

Да, эта идея мне нравится гораздо больше, чем HTML 5. По идее, Яндекс должен был позаботиться о кроссплатформенности и совместимости. Сейчас протестирую на разных браузерах и отпишусь.

Но есть пара вопросов:

1) Средствами этого скрипта форум клиента ставится в некоторую зависимость от третьего сайта. Конечно, это лучше, чем частичная работа, но всё же: что, если сам Яндекс будет недоступен? Для поиска я пользуюсь почти исключительно Гуглом, но тем не менее, в процессе работы с сервисами Яндекса уже успел не раз с этим столкнуться. Особенно жестоко иногда тормозят Яндекс деньги - бывало, что по целому дню не открывались. Может, стоит предусмотреть fallback для этого случая, чтобы если Яндекс недоступен, миниатюры создавались средствами форума? Или это невозможно?

2) Как отреагирует сам Яндекс на попытку использовать свой сервис третьими сайтами? Не будет последствий? Или они наоборот только поощряют? Не знаком с их политикой по данному вопросу.

Добавлено спустя 39 минут 46 секунд:
Проверил: от браузеров там нечему вроде зависеть, понятно. Но по скорости работы итог неутешителен: катастрофически возрастает время загрузки файлов. Если в "чистом" phpBB файлы грузятся максимум за 1 секунду, причём от количества самих файлов время не зависит, то с модом это время возрастает в среднем до 7 секунд на каждый файл. Например, три картинки не очень большого размера (600-900 пикс., использовался Multiple File Upload ) грузились у меня аж 22 сек. Проверено неоднократно, т.е. это явление - явно не случайно.
При необходимости снять комментарий со строки после:
// uncomment for thumbnails creation only via yandex.disk, no GD or imagemagick
В этом случае миниатюры будут создаваться только через Яндекс.Диск.
Если снять комментарий, то миниатюры вообще не создаются.

P.s. Логин и пароль - те же самые, что вводятся при входе в почту?
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Shredder писал(а):1) ...Может, стоит предусмотреть fallback для этого случая, чтобы если Яндекс недоступен, миниатюры создавались средствами форума? Или это невозможно?
Если не трогать строчку ...uncomment for thumbnails creation... в случае неудачи будет задействован imagemagick и если его нет или в случае его неудачи - тогда GD.
Shredder писал(а):2) Как отреагирует сам Яндекс на попытку использовать свой сервис третьими сайтами? Не будет последствий? Или они наоборот только поощряют? Не знаком с их политикой по данному вопросу.
Он для этого и предназначен, реагируют нормально. Единственное - не стоит афишировать, что картинка закачивается на сервис только для создания превью, а потом удаляется... Могут ведь ограничения или задержки ввести... Хотя вряд ли - иначе будет облом у тех, кто строит свои галереи на ЯД, а яндекс любит брать бабки за всё что угодно - в данном случае за место на ЯД, они же его продают)) Так что думаю, проблем не предвидится.
Shredder писал(а):Проверил: от браузеров там нечему вроде зависеть, понятно. Но по скорости работы итог неутешителен: катастрофически возрастает время загрузки файлов. Если в "чистом" phpBB файлы грузятся максимум за 1 секунду, причём от количества самих файлов время не зависит, то с модом это время возрастает в среднем до 7 секунд на каждый файл. Например, три картинки не очень большого размера (600-900 пикс., использовался Multiple File Upload ) грузились у меня аж 22 сек. Проверено неоднократно, т.е. это явление - явно не случайно.
Зависит от хостинга. На моём домашнем (80/40 Мбит вх/исх) всего 2-3 секунды лишних на 4-6 мегабайтных картинках. Картинки 800x600 - менее секунды.

Странно, по моим наблюдениям яндекс не отслеживает, кто лезет на ЯД - с сервера на хостинге или нет, и это не влияет на скорость...
Shredder писал(а):
При необходимости снять комментарий со строки после:
// uncomment for thumbnails creation only via yandex.disk, no GD or imagemagick
В этом случае миниатюры будут создаваться только через Яндекс.Диск.
Если снять комментарий, то миниатюры вообще не создаются.
Странно, у меня OK. Проверим...

Елки-палки, там бага, вместо

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

	else if ( !$used_imagick )
надо просто

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

	if ( !$used_imagick )
тогда в случае неудачи ydresize будет задействован imagemagick, а у меня неудач не было, вот и не заметил. Ща поправлю и залью новый архив. Спасибо за найденную багу !
Shredder писал(а):P.s. Логин и пароль - те же самые, что вводятся при входе в почту?
Да.

Размерчик диска лучше увеличить доступными бесплатными средствами, у ЯД есть ограничение: когда трафик на скачку файлов превышает размер диска, ограничивается скорость (на сутки), но это не относится к владельцу диска, а к гостям, поэтому так - на всякий случай))

Добавлено спустя 3 минуты 51 секунду:
P.S. Кстати, уже накачал с помощью этого мода на один форум штук 200 картинок, размерчики от 640x480 до 4 с чем-то тысяч пикселов, на этом и отлаживался. Вроде, полёт был нормальный.

Добавлено спустя 13 минут 11 секунд:
Оффтоп:
Кстати, на моей тестовой площадке Shredder это Mario Cimarro, ну вы бы как-то договорились, кто есть кто, ники могу поменять, а то я уже начал путаться))
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

c61 писал(а):Зависит от хостинга. На моём домашнем (80/40 Мбит вх/исх) всего 2-3 секунды лишних на 4-6 мегабайтных картинках. Картинки 800x600 - менее секунды.
В том и дело, что те картинки, которые я грузил, имеют размер по 50-60 кб, в сумме из 3-х картинок это 160 кб, там в принципе нечему забивать канал. Сервер - тот же самый, на котором расположен этот форум, со скоростью у них всё в порядке. Сейчас проверил ещё раз с ресайзом, результат тот же самый - каждая картинка загружается по 8-10 секунд, а если раскомментирована строка обязательного создания через Яндекс диск, то миниатюры не создаются вообще. Даже кеши на всякий случай очистил, хотя там вроде бы нечему зависеть от кешей. Openssl на сервере есть.
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Очень странно... Проверю сегодня-завтра на других хостингах.

Добавлено спустя 4 часа 5 минут 46 секунд:
Обнаружен и ликвидирован очередной баг (вернее, необработка кривого ответа сервера) в webdav client'е от Christian Juerges, вызывающий хостингозависимость )) А конкретно - некорректный разбор некорректного ответа webdav сервера, некорректно принятый сервером хостинга в определённых ситуациях. Собрана v.1.0.3, лежит где обычно. Баг мог проявляться именно как сообщалось: долгая загрузка фотки (с повтором - то есть дважды) на ЯД и в результате никакого превью не получаем, только время тратим...

P.S. Все хостинги кривые по своему... ИМХО

P.P.S. Проверял на самом старом сервере хостинга mtw.
Shredder
Администратор
Сообщения: 1073
Зарегистрирован: 22.08.13 09:05
Благодарил (а): 133 раза
Поблагодарили: 264 раза
Контактная информация:

Ресайз загружаемых изображений на стороне клиента

Сообщение Shredder »

Баг с не создававшимися миниатюрами теперь пропал, но ожидание осталось таким же долгим, а в большинстве случаев стало вообще всё намертво виснуть. Иногда, если открыть страницу, где при попытке отправки сообщения всё повисло, то отображается вложение с отсутствующей миниатюрой:
crash.png
Полноразмерная картинка при этом открывается нормально.

Если раскомментировать дебаг в config.php, то при удачной загрузке начинает отображаться следующее инфо:
warnings.png
warnings.png (4.3 КБ) 14397 просмотров
warnings.png
warnings.png (4.3 КБ) 14397 просмотров
Мои моды и расширения для phpBB
Выполняю работы по phpBB3 на заказ. Пишите в личку или на почту.
Бесплатная поддержка - только в темах.
Аватара пользователя
c61
Разработчик модов
Сообщения: 249
Зарегистрирован: 24.08.13 16:46
Благодарил (а): 20 раз
Поблагодарили: 62 раза

Ресайз загружаемых изображений на стороне клиента

Сообщение c61 »

Добавлю-ка я лог... завтра-послезавтра. А то не понятно, что происходит.
Ответить