Advertisement
  1. Web Design
  2. HTML/CSS
  3. CSS

Editando Imagens no CSS: Filtros

Scroll to top
Read Time: 6 min
This post is part of a series called Editing Images in CSS.
Editing Images in CSS: Blend Modes

() translation by (you can also view the original English article)

Consideremos a situação onde temos que ter versões com alto contraste, embaçada e brilhosas de imagens em um site. Antes dos filtros CSS, nossa única opção era ter versões diferentes dessas imagens ou manipular a imagem via JavaScript.

A não ser que queiramos manipular pixels da imagem original, os Filtros CSs proveem uma saída fácil. Comcemos o tutorial com uma discussão rápida sobre os filtros disponíveis.

Filtro Desfocado

Esse filtro aplicará desfoque Guassiano às imagens. Teremos de prover o valor do comprimento que determinará quantos pixels precisarão ser mesclados. Isso implica que, quanto maior o valor, mais desfoque teremos. Tenhamos em mente que não podemos usar percentuais para determinar o raio do desfoque. O valor 0 será usado se não especificarmos o parâmetro. A sintaxe desse filtro é:

1
filter: blur( <length> )

O filtro blue() não aceita valores negativos.

CSS Blur Filter EffectCSS Blur Filter EffectCSS Blur Filter Effect

Filtro de Brilho

Esse filtro aplicará um multiplicador linear às imagens, tornando-as mais claras ou escuras, comparando às originais. Aceita números ou valores percentuais. Com 0%, teremos uma imagem toda preta. Com 100% teremos uma imagem sem mudanças. Valores mais altos resultaram em imagens mais claras. Um valor alto suficiente deixará a imagem praticamente branca. A sintaxe para esse filtro é:

1
filter : brightness( [ <number> | <percentage> ] )

O filtro não aceita valores negativos.

CSS Brightness Filter EffectCSS Brightness Filter EffectCSS Brightness Filter Effect

Filtro de Contraste

Esse filtro altera o contraste das imagens. Como o filtro de brilho, aceita números e valores percentuais. Um valor 0% dará numa imagem totalmente cinza. Um valor de 100% não causa qualquer efeito. Valores maiores que 100% produzirão imagems com alto contraste. Também não podemos usar valores negativos com esse filtro. A sintaxe dele é:

1
filter : contrast( [ <number> | <percentage> ] )
CSS Contrast Filter EffectCSS Contrast Filter EffectCSS Contrast Filter Effect

Filtro de Sombra Projetada

Quase todos nós usamos sombras de caixa pelo menos 1 vez. O problema com elas é que sao bem quadradas. Não se pode usá-las para criar sombras de formas irregulares. Por outro lado, o filtro drop-shadow cria sombras ao redor dos limites da imagem. Basicamente é uma versão borrada da máscara do canal alfa da imagem usada. A sintaxe de drop-shadow é:

1
filter : drop-shadow( <length>{2,3} <color>? )

Os dois primeiros valores são obrigatórios e ajustam a distância da sombra na vertical e horizontal. O terceiro valor, <blur-radius> é opcional. Um valor grande criará uma sombra mais clara. A demo abaixo mostra o filtro em ação. Se sobrepormos o pinguim com o mouse, a cor da sombra mudará de laranja para vermelho.

Filtro de Escala de Cinza

Esse filtro tornará as imagens em tons de cinza. 0% deixa a imagem inalterada, enquanto 100% fará a imagem completamente em tom de cinza. Qualquer falor entre esses dois, será um multiplicador linear para esse efeito. Também não se pode usar valores negativos com grayscale(). A sintaxe desse filtro é:

1
filter : grayscale( [ <number> | <percentage> ] )
CSS Grayscale Filter EffectCSS Grayscale Filter EffectCSS Grayscale Filter Effect

Filtro de Rotação de Matiz

Esse filtro aplicará uma rotação de matiz às imagens. O parâmetro (em valor angular) determinará o número de graus ao redor do círculo de cor que a imagem será ajustada. Com 0deg, a imagem ficará inalterada. Com 360deg, o filtro será invertido. A sintaxe é:

1
filter : hue-rotate( <angle> )
CSS Hue-Rotate Filter EffectCSS Hue-Rotate Filter EffectCSS Hue-Rotate Filter Effect

Filtro Invertido

Esse filtro inverterá a imagem. A quantidade de inversão dependerá do valor passado como parâmetro. 0% causará nenhum efeito à imagem. Por outro lado, 100% inverterá completamente. 50% gerará uma imagem totalmente cinza. Qualquer valor entre os extremos será um multiplicador linear. O filtro não aceita valores negativos. A sintaxe de invert() é:

1
filter : invert( [ <number> | <percentage> ] )
CSS Invert Filter EffectCSS Invert Filter EffectCSS Invert Filter Effect

Filtro de Opacidade

O filtro de opacidade aplica transparência à imagem. 0% significa ter 0% de opacidade, ou seja, transparência total. Similarmente, 100% resulta em uma imagem totalmente opaca.

O filtro é similar à propriedade opacity do CSS. A única diferença é que nesse caso, alguns navegadores podem prover aceleração de hardware para melhor performance. A sintaxe é:

1
filter: opacity( [ <number> | <percentage> ] );
CSS Opacity Filter EffectCSS Opacity Filter EffectCSS Opacity Filter Effect

Filtro de Saturação

Esse filtro determina a saturação da imagem. A saturação em si depende do valor passado. Não se pode usar valores negativos. 0%, valor mínimo, a imagem estará totalmente não saturada. Com saturação em 100%, a imagem fica inalterada. Para imagens super-saturadas, devemos usar valores acima de 100%. A sintaxe é:

1
filter : saturate( [ <number> | <percentage> ] )
CSS Saturate Filter EffectCSS Saturate Filter EffectCSS Saturate Filter Effect

Filtro de Sépia

O filtro transforma as imagens em tons de sépia. Com 100%, será totalmente sépia e om 0% a imagem ficará inalterada. Valores intermediários serão multiplicadores lineares para o filtro. Não podemos usar valores negativos. A sintaxe de de sepia() é:

1
filter : sepia( [ <number> | <percentage> ] )
CSS Sepia Filter EffectCSS Sepia Filter EffectCSS Sepia Filter Effect

Filtro de URL

Há situações que queremos usar nossos próprios filtros nas imagens. O filtro url receberá a localização de um arquivo XML que especifica um filtro SVG. Também aceita uma âncora para especificar o elemento filtro. Eis um exemplo que resulta em posterização da imagem:

1
// The filter
2
3
<svg>
4
  <filter id="posterize">
5
    <feComponentTransfer>
6
      <feFuncR type="discrete" tableValues="0 0.33 0.66 0.99" />
7
      <feFuncG type="discrete" tableValues="0 0.33 0.66 0.99" />
8
      <feFuncB type="discrete" tableValues="0 0.33 0.66 0.99" />
9
    </feComponentTransfer>
10
  </filter>
11
</svg>
12
13
// Required CSS to apply this filter
14
15
filter: url(#posterize);

O resultado finla apüos aplicar o filtro seria algo parecido com essa imagem:

An example of the URL filterAn example of the URL filterAn example of the URL filter

Usando Vários Filtros

Se não estivermos satisfeitos com o retorno de um único filtro, podemos combinar vários em uma única imagem. A ordem usada pode produzir efeitos ligeiramente diferentes. Múltiplos filtros podem ser aplicados da seguinte forma:

1
filter : sepia(0.8) contrast(2);
2
filter : saturate(0.5) hue-rotate(90deg) brightness(1.8);

Ao usar múltiplos filtros juntos, a primeira função da lista é aplicada na imagem original. As outras funções são aplicadas no retorno do filtro anterior. Essa demo mostra duas outras combinações de filtros em ação.

Em circunstâncias especiais, a ordem dos filtros podem gerar resultados completamente diferentes. Por exemplo, usando sepia() e grayscale() produzirá um resultado sépia, por outro lado, usando grayscale() e sepia() resultará em retorno em tom de cinza.

Animando Filtros

Podemos animar a propriedade filtro. Com a combinação certa de imagens e filtros, podemos explorar esse recurso para criar efeitos estonteantes. Consideremos o código abaixo:

1
@keyframes day-night {
2
  0% {
3
    filter: hue-rotate(0deg) brightness(120%);
4
  }
5
  10% {
6
    filter: hue-rotate(0deg) brightness(120%);
7
  }
8
  20% {
9
    filter: hue-rotate(0deg) brightness(150%);
10
  }
11
  90% {
12
    filter: hue-rotate(180deg) brightness(10%);
13
  }
14
  100% {
15
    filter: hue-rotate(180deg) brightness(5%);
16
  }
17
}

Usamos hue-rotate() e brightness() juntos para criar ilusão de dia e noite. A imagem original em si tem matiz laranja. Por até 20% da animação, aumentamos o brilho gradualmente e mantemos a rotação de matiz em zero. O efeito criar um dia ensolarado. Quando a animação termina, rotacionamos o matiz em 180º. Isso resulta em matiz azul. Combinando isso com baixo brilho, criamos o efeito da noite.

Pensamentos Finais

Além desses 11 filtros, há, também, o filtro custom(). Ele nos permite criar tipos diferentes de efeitos usando sombreadores. Há alguns problemas com filtros custom() que interromperam seu desenvolvimento. Adobe tem trabalhado ativamente para trazer soluções para os problems de corte ao usar filtros custom(). Espera-se que logo estejam disponíveis para desenvolvedores usarem em seus projetos.

Agora, voltando ao trabalho. Filtros são aplicados em todas as partes do elemento alvo, incluindo quaisquer textos, planos de fundo ou bordas. Eis uma demo para testar combinações de filtros em várias imagens.

Como vimos nos dois artigos anteriores, filtros CSS podem mudar completamente as imagens às quais são aplicadas. Contudo, algumas vezes, não é o bastante. No próximo artigo, discutiremos como mesclar dois modos para editar imagens.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.