Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Ресайзер картинок (https://javascript.ru/forum/offtopic/41345-resajjzer-kartinok.html)

kobezzza 09.09.2013 15:45

Ресайзер картинок
 
Ребят, мб кто сталкивался, нужна либа, которая умеет ресайзить картинки (canvas) с заданием нужной степени сглаживания и использует современные способы оптимизации, такие как потоки и типизированные массивы. Самому писать лениво, подумал, мб есть норм готовые штуки, но ничего пока толкового не нашёл.

И ещё, какие можете посоветовать либы для работы с потоками? Пока остановился на https://github.com/padolsey/operative

kobezzza 09.09.2013 16:30

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 271600)
kobezzza,
А чем обычный drawImage не устраивает? Смысл убирать в поток? На скрипте оно будет на порядок медленнее нативного программного ресемплинга, и на два порядка медленнее аппаратного. Такая деградация производительности должна быть очень обоснована.

Что касается оптимизаций, то "просто массивы" там и так некуда втыкать - есть только исходный и конечный растр в виде Uint8ClampedArray.

Не нравится результат (чтобы понять, что я имею ввиду достаточно сравнить результат ресайза, например, в фотошопе и через drawImage). Поток мне главным образом нужен, чтобы не лочить интерфейс и показывать статус загрузки. Собственно уже пишу:)

kobezzza 09.09.2013 18:38

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 271622)
В фотошопе разные есть. Бикубический взял?
Нативная интерполяция на канве, вроде, билинейная, но могу ошибаться.

А хрен его знает:) Но разница на лицо. Собственно я нашёл алгоритм, качество отличное на выходе, но больно медленно работает. Вот курю, как ускорить можно.

kobezzza 09.09.2013 21:46

Получилось сделать хорошую скорость: сейчас алгоритм примерно такой:
изначальная картинка жмётся через drawImage до максимально допустимого размера, а затем жмётся в неск потоков с помощью алгоритма Ланцоша.

http://screencast.com/t/QfD57flZmvE
(1 - оригинальная картинка, drawImage, алгоритм Ланцоша)

Как видно, что при сильном уменьшении картинок через drawImage детали создают слишком высокую резкость, а во втором варианте происходит дополнительное сглаживание пикселей за счёт чего картинка выглядит лучше (степень сглаживания линейно влияет на скорость работы и её можно менять).

Завтра, как всё доделаю, могу выложить код, если кому нужно :)

monolithed 09.09.2013 21:51

https://github.com/mailru/FileAPI/bl...leAPI.Image.js

kobezzza 09.09.2013 21:54

Цитата:

Сообщение от monolithed (Сообщение 271645)

У вас тоже не стандартный алгоритм сжатия? Если так, то хде ты был раньше:) я весь день сегодня с этим возился :(

monolithed 09.09.2013 23:33

Цитата:

Сообщение от kobezzza
У вас тоже не стандартный алгоритм сжатия?

Не могу ответить на твой вопрос, т.к. не я писал :)


Часовой пояс GMT +3, время: 21:29.