Каков реальный алгоритм для CSS-фильтра hue-rotate?

В настоящее время я пытаюсь воспроизвести фильтр css «hue-rotate», который производит то же самое, что и svg feColorMatrix «hueRotate» в браузерах на сервере. Я посмотрел на спецификацию, реализацию firefox и реализацию webkit. Я портировал каждый алгоритм на ruby, но результаты все равно отличаются от того, что я вижу в своих браузерах.

Я собрал немного jsfiddle, чтобы увидеть различия для примера изображения.

<body>
<p>Original image:</p>
<div class="image"></div>
<p>Browser filtered image: (<- I need this generated on the server!</p>
<div class="image hue-90" ></div>
<p>Webkit/spec algorithm image:</p>
<div class="webkit-algorithm-result"></div>
</body>

А вот простой ruby-код для преобразования изображения.

Вопрос в том, что является секретным ингредиентом? Почему результирующее изображение все еще отличается?

PS: Несмотря на то, что алгоритмы firefox и webkit немного отличаются, результат одинаков. Я пробовал image magick и gimp, которые дают одинаковые результаты, но опять же отличаются от результатов браузера И отличаются от предполагаемых алгоритмов выше. У Phantomjs есть и другие ошибки.

Реализация Firefox

Реализация Webkit

Спецификация


person RedRoosterMobile    schedule 17.09.2015    source источник
comment
Одна вещь, которую вы, похоже, не делаете, — это преобразование цветов в цветовое пространство sRGB (что требуется по спецификации). Хотя я не думаю, что это объяснит большую разницу в ваших изображениях.   -  person Paul LeBeau    schedule 17.09.2015
comment
image magick говорит, что мое исходное изображение имеет sRGB: spaceparty.png PNG 120x120 120x120+0+0 8-бит sRGB 31,8 КБ 0,000u 0:00,009   -  person RedRoosterMobile    schedule 17.09.2015
comment
как заявил Роберт Лонгсон, я случайно поменял местами некоторые значения цвета. Все еще рубиновый, и даже jruby был слишком медленным для моих нужд. Я остановился на этом инструменте C++ cmd github.com/RedRoosterMobile/huerotate-like-webkit   -  person RedRoosterMobile    schedule 17.09.2015


Ответы (1)


Разве вам не нужно иметь аргументы в правильном порядке?

def calculate_hue_webkit (r, b, g, угол)

...

результат = calculate_hue_webkit (r, g, b, 90)

person Robert Longson    schedule 17.09.2015
comment
чувак, крепко тебя обнимаю! Мне нужны новые очки. Теперь полученное изображение именно то, что я искал! - person RedRoosterMobile; 17.09.2015