Бикубическое изменение размера изображений с помощью Javascript

Есть ли способ изменить размер фактического изображения с помощью JavaScript? Я не говорю об изменении DOM, чтобы заставить браузер изменить размер изображения. Я действительно хочу изменить размер пиксельных данных изображения, а затем отобразить это.

В основном моя проблема заключается в следующем: Firefox полностью не справляется с уменьшением изображений с деликатными функциями, потому что у него есть только ближайший сосед и бинлинейный. В любом другом браузере, даже в IE, есть поддержка Bicubic. Ходят разговоры о том, что это будет включено в ближайшее время, но эти разговоры продолжаются на протяжении более года.

Я не возражаю против загрузки полноразмерных изображений, потому что я все равно хочу, чтобы они были загружены. Когда пользователь наводит курсор на маленькую версию изображения, большая версия немедленно появляется в другом месте страницы. Если бы я изменил размер на стороне сервера, мне пришлось бы загружать ОБЕ копии изображений, что привело бы к еще большему трафику. Если нет другого обходного пути, то это то, что мне придется сделать... Я просто не хочу.


person colithium    schedule 01.09.2010    source источник
comment
Значит, вам это нужно только для Firefox или другого браузера с поддержкой холста?   -  person    schedule 01.09.2010
comment
Сайт как у меня выглядит нормально во всем кроме ФФ (даже самой последней версии). И это прямой результат того, что FF не предлагает бикубические (или лучшие) возможности изменения размера.   -  person colithium    schedule 01.09.2010
comment
Я провел некоторое время с Google, надеясь найти какой-нибудь код, который можно было бы просто преобразовать, но мне не повезло. Это строго охраняемый секрет?   -  person    schedule 01.09.2010
comment
Я думаю, что обычный ответ таков: сгенерируйте их сами на сервере. Или: используйте Flash/Silverlight. Я бы предпочел не использовать ни один из вариантов, но... Похоже, это просто не часть javascript: -/   -  person colithium    schedule 01.09.2010


Ответы (1)


Возможно. Вы получаете изображение в том же домене, пишете на холст, затем манипулируете данными пикселей оттуда (сложно, но возможно, я уверен), а затем либо используете это, либо выводите как png/gif/jpg... НО... Я не думаю, что вы найдете лучший способ сохранить деликатные функции, чем CSS.

person donohoe    schedule 01.09.2010
comment
Во всех других браузерах изображение с измененным размером выглядит идеально, потому что эти браузеры используют что-то лучшее, чем билинейная интерполяция — тонкие особенности сохраняются. Это просто огромный недостаток FF, который я пытаюсь обойти. - person colithium; 01.09.2010
comment
Реализации различных алгоритмов, которые делают именно то, что упомянуто выше, см. здесь: jsperf.com/pixel-interpolation /2 - person Daniel; 27.10.2011