CSS-фильтр как модификатор цвета для одного изображения

Можно ли изменить с помощью методов фильтра CSS, таких как HueRotate, Saturation и Brightness, цвет PNG, нарисованный полностью белым? Подобно эффекту наложения цвета в Photoshop, но в CSS.

Это было бы хорошим решением, чтобы избежать создания большого количества изображений, которые меняют только цвет. Например, набор иконок, которые имеют темную и светлую версии для пользовательского интерфейса.


person Mateus Leon    schedule 28.06.2013    source источник
comment
@MichaelPetrotta: почему вы вернули мой вопрос к первоначальной версии? Я знаю, что мой английский не так хорош, и улучшение, сделанное другим парнем, было действительно необходимо.   -  person Mateus Leon    schedule 28.06.2013
comment
Его редактирование было плохим - он добавил столько же урона, сколько и удалил. Но вы правы, я удалил некоторые исправления. Я отредактирую.   -  person Michael Petrotta    schedule 28.06.2013
comment
Спасибо, чувак, я очень ценю это!   -  person Mateus Leon    schedule 28.06.2013
comment
Кстати: правда, не совсем... простите, хахаха...   -  person Mateus Leon    schedule 28.06.2013


Ответы (4)


Вы также можете раскрасить белые изображения, добавив сепию, а затем некоторую насыщенность, поворот оттенка, например. в CSS:

filter: sepia() saturate(10000%) hue-rotate(30deg)

Это должно сделать белое изображение зеленым.

http://jsbin.com/xetefa/1/edit

person Ciantic    schedule 27.08.2014
comment
Добавлен JSBin, чтобы показать это для каждого значения поворота оттенка. Понятно, что не все цвета могут быть сгенерированы, к сожалению. - person mahemoff; 18.11.2014
comment
добавьте яркость (50%), чтобы перемещаться по цветовому кругу и выходить из него, и вы сможете получить любой цвет - person ewanm89; 21.11.2014
comment
Это должен быть принятый ответ - теперь, если бы кто-то создал онлайн-инструмент для создания фильтра, необходимого для получения определенного значения rgb/hsl... - person Jon z; 15.03.2015
comment
Это действительно умная идея — понять, что фильтр sepia может изменить оттенок на цвет! Отличный материал. Согласитесь, это следует принять. - person Gershy; 09.10.2015
comment
Я открыл вопрос о точной формуле перехода от черного к любому цвету здесь stackoverflow.com/q/42966641/181228 - person glebm; 23.03.2017
comment
Удивительно, и практически все цвета можно получить, добавив инвертирование. - person ViliusL; 25.10.2017
comment
По-видимому, это работает в Chrome, но не в Firefox. - person nylki; 13.02.2018

Это классная идея, но она не будет работать с белым изображением, как вы предлагаете. Вы можете сделать это с цветным изображением, но не с белым. Я попробовал следующее в Safari, используя версию CSS-фильтра webkit:

<div style="background-color:#FFF; -webkit-filter: hue-rotate(90deg); width:100px; height:100px; border:1px solid #000;"></div>

Но коробка остается белой. Если я переключу цвет на синий следующим образом:

<div style="background-color:#00F; -webkit-filter: hue-rotate(90deg); width:100px; height:100px; border:1px solid #000;"></div>

Я получаю красную коробку. Это связано с тем, что фильтр работает со значением оттенка, которого нет ни у белого, ни у черного.

person bitfiddler    schedule 28.06.2013
comment
Спасибо, чувак, это было действительно ясно! Итак, взяв за отправную точку синий (или любой другой цвет, кроме абсолютно черного и белого), я могу получить любой другой цвет? В том числе черно-белые? - person Mateus Leon; 28.06.2013
comment
Пожалуйста. Было весело пробовать. Вы можете повернуть на любой цвет или сделать цвет черным или белым по яркости и оттенкам серого. - person bitfiddler; 28.06.2013
comment
Как раз об этом я и говорю! Ха-ха-ха... конечно, есть ограничения на широкое использование этой техники, но когда вы получаете проект с конкретной целью, такие вещи действительно помогают нам! - person Mateus Leon; 28.06.2013

На самом деле, к счастью, есть способ!

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

sepia(100%)

Я попробовал следующий стиль css на сплошном цветном изображении, базовый цвет которого #ccc

sepia(100%) contrast(50%) saturate(500%) hue-rotate(423deg)

Мне удалось изменить цвет изображения на светло-зеленый.

Наслаждайтесь ;)

person xRavisher    schedule 24.09.2016
comment
Фильтр hue-rotate() предназначен для увеличения до 360deg max, потому что в цветовом круге 360 градусов. Таким образом, зеленый лайм можно представить как hue-rotate(63deg), потому что 423 - 360 = 63. - person JamesWilson; 26.08.2020

Попробуйте сделать brightness больше, чем 100%. Вы заметите, что изображение начнет исчезать до белого цвета, когда вы продвинетесь выше 100%. Темнота изображения будет определять, как далеко от 100% вам нужно переместиться.

img {

      -webkit-filter: brightness(1000%);

}

Помните, что только пользователи Google Canary могут видеть фильтры CSS3 и что фильтры CSS3 не влияют на изображение в любом другом браузере. (пока по крайней мере).

person j0sh1e    schedule 28.06.2013
comment
Это похоже на решение, но если вы хотите работать только с черно-белым изображением, а для этого уже есть один filter: grayscale. Но если вы хотите охватить все возможные цвета, вам нужно выбрать один цвет по умолчанию для значка и манипулировать им с помощью hsl filters. Это то, о чем я говорю, и я просто не знаю, что это такое. - person Mateus Leon; 28.06.2013
comment
@MateusDuartePoncedeLeon, так что вы имеете в виду, что вы хотели бы, чтобы изображение было не только полностью белым, но и красным? Использование белого цвета, вероятно, было плохим примером. - person j0sh1e; 28.06.2013
comment
Конечно, белый был плохим выбором для иллюстрации решения, но я этого не заметил, потому что действительно верил, что белый цвет можно изменить так, как я хочу. Спасибо за вашу помощь! - person Mateus Leon; 28.06.2013