PHPit - PHP

"Agora, pois, permanecem a fé, a esperança, o amor, estes três; mas o maior destes é o amor." (I Coríntios 13:13)

Filtros de imagem com GD - Sépia, brilho, contraste, blur, etc

Prefácio


Sempre gostei de trabalhar com a biblioteca GD. Recentemente, durante algumas pesquisas, descobri que há um jeito de aplicar efeitos nas imagens, e é isso que veremos hoje.

Conceito


A função que utilizaremos é a imagefilter(). Com ela podemos aplicar diversos filtros nas imagens como sépia, inversão de cores, preto e branco, alteração de brilho e contraste, coloração, embaçar (emboss), blur e muitos outros. A seguir veremos alguns exemplos do que pode ser feito com esta função.

Mão na massa


Como eu gosto muito da Alemanha, resolvi pegar essa imagem de um castelo de lá para usar como exemplo.



Todos os códigos vistos abaixo assumem que a imagem já estará aberta, dentro da variável $img, conforme o código abaixo:
Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. $img = imagecreatefromjpeg('imagem.jpg');
  3. ?>
<?php
    $img 
imagecreatefromjpeg('imagem.jpg');
?>


Negativo


Para aplicar o filtro negativo, você deve utilizar a constante pré-definida chamada IMG_FILTER_NEGATE.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_NEGATE);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_NEGATE);
?>


Resultado:


Preto e branco - Desaturar (Desaturate)


A constante se chama IMG_FILTER_GRAYSCALE. Com ela você pode desaturar completamente a imagem.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_GRAYSCALE);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_GRAYSCALE);
?>




Brilho (Brightness)


É possível alterar o brilho da imagem utilizando a constante IMG_FILTER_BRIGHTNESS, mas para tanto será necessário passar mais um parâmetro, que irá indicar o nível na alteração do brilho.

Seguem dois exemplos, o primeiro aumentando o brilho e o segundo diminuindo.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_BRIGHTNESS, 80);
  3. // ...
  4. imagefilter($img, IMG_FILTER_BRIGHTNESS, -80);
  5. ?>
<?php
    imagefilter
($imgIMG_FILTER_BRIGHTNESS80);
    
// ...
    
imagefilter($imgIMG_FILTER_BRIGHTNESS, -80);
?>





Contraste


Utilizando a constante IMG_FILTER_CONTRAST você pode alterar o contraste. É possível atingir resultados bastante interessantes utilizando um valor negativo.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_CONTRAST, -50);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_CONTRAST, -50);
?>




Colorir (Colorize)


Para aplicar uma camada de cor sobre a imagem, você pode utilizar a constante IMG_FILTER_COLORIZE.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_COLORIZE, 255,175,0);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_COLORIZE255,175,0);
?>




Detecção de bordas (Edge detect)


Efeito bem maluco, que encontra as bordas da imagem e as desenha. A constante utilizada é a IMG_FILTER_EDGEDETECT.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_EDGEDETECT);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_EDGEDETECT);
?>




Entalhe (Emboss)


Não confunda o "emboss" com o "embaçar, desfocar (blur)". Com a constante ... você consegue gerar um efeito bacana.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_EMBOSS);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_EMBOSS);
?>




Gaussian Blur


Este comando dispensa comentários. A constante é IMG_FILTER_GAUSSIAN_BLUR.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_GAUSSIAN_BLUR);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_GAUSSIAN_BLUR);
?>




Blur


Aplicar um Blur normal. Para tanto, utilize a constanteIMG_FILTER_SELECTIVE_BLUR.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_SELECTIVE_BLUR);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_SELECTIVE_BLUR);
?>




Sketch


Com a constante IMG_FILTER_MEAN_REMOVAL é possível atingir um efeito conhecido como "Sketch", que é algo parecido com um rascunho ou algo passado apenas a lápis.
Surgem resultados bacanas quando você remove a saturação da imagem antes de aplicar este efeito.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_MEAN_REMOVAL);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_MEAN_REMOVAL);
?>




Smooth


Aplique um filtro de suavização na imagem utilizando IMG_FILTER_SMOOTH.

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2. imagefilter($img, IMG_FILTER_SMOOTH, 90);
  3. ?>
<?php
    imagefilter
($imgIMG_FILTER_SMOOTH90);
?>




Conclusão


A biblioteca GD é bastante completa. Muitos efeitos estão disponíveis e vai da imaginação de cada um aplicá-los como bem entender. É possível fazer muita coisa legal, mas sempre tomando cuidado para não estourar a memória do servidor.

Peço perdão a todos vocês pela demora em postar mais um tutorial, mas é que a minha vida está bastante corrida. Em breve terem muito mais tempo pra escrever... E trarei muitas novidades!
Mandem dúvidas e sugestões!

Um abraço e fiquem com Deus!

Dim dim

 

Comentaí! (07)

Caramba não sabia que dava pra aplicar estes filtros no php, no ultimo ano da faculdade tive uma disciplina chamada tópicos em computação gráfica fiz um filtro o filtro de detecção de bordar (na unha) em php deu um trabalho do cão, acabei largando mão e fazendo os outros em Java mas pelo visto da pra fazer em php olha ai :)

[]'s Anselmo Battisti battisti em 19/05/2008 às 22:08 utilizando o Mozilla Firefox Mozilla Firefox 2.0.0.13 no Ubuntu Linux Ubuntu Linux
Rafa!!!

Muito legal o artigo! Eu adoro brincar com a biblioteca GD! Tá tudo muito bem explicado, parabéns!

Mas uma curiosidade que eu sempre tive: quando a gente usa esses scripts, ele gera uma nova imagem né? Não é a mesma; ele pega da "original" e cria uma segunda. É isso? (então ele num faz cálculos milagrosos com o jpg original)

Abraço! Marta em 19/05/2008 às 23:54 utilizando o Mozilla Firefox Mozilla Firefox 2.0.0.14 no Windows Windows XP
Rafa!

Sabe né, tu é minha inspiração ;D

Quando eu crescer quero ser que nem tu!
iseuhsiueh.

Beijo querido! NaT em 22/05/2008 às 15:36 utilizando o Mozilla Firefox Mozilla Firefox 2.0.0.14 no Windows Windows XP
pqp! por esses filtros nem o xorna esperava... kkkkkkkk xorna em 26/08/2008 às 22:16 utilizando o Internet Explorer Internet Explorer 7.0 no Windows Windows Vista
Qual seria a vantagem de usar estes efeitos em PHP (e não me preocupar em estourar a memória) em relação a usar um software editor para tais efeitos? Edielson em 07/10/2008 às 11:27 utilizando o Mozilla Firefox Mozilla Firefox 3.0.3 no Windows Windows XP
Caro Edielson,

Na verdade não há como comparar os efeitos do PHP com os de um editor gráfico como Photoshop ou Fireworks, pois as finalidades são diferentes.

Estes filtros são apenas para você tratar imagens que são enviadas através de formulário no seu site, sem a necessidade de intervenção humana...

Um abraço! Rafael Jaques em 07/10/2008 às 13:35 utilizando o Mozilla Firefox Mozilla Firefox 3.0.3 no Windows Windows 2000
Legal, tenho fotos de pacientes num sistema online e estou tentando aplicar isso nas imagens(maioria rx periapical e panorânico), sou cirurgião-dentista. Estou levando pau pois estão todas no mysql. Mas chego lá isso é de grande ajuda, ah e acho que explica pro Edielson um pouco por que usar isso e qual seria a vantagem: tempo!. Abraço, valeu jack em 25/04/2009 às 17:23 utilizando o Mozilla Firefox Mozilla Firefox 3.0.8 no SuSE Linux SuSE Linux
 

Comenta logo, pô!

* Todos os links inseridos nos comentários possuem rel="nofollow" para impedir com que crawlers considerem os mesmos como relevantes.
* Os e-mails não são divulgados.

Dados pessoais

Você é realmente um humano?

Finalmente, digite seu comentário :)

Caixinha de Sugestões

O que é isso? Aqui você pode simplesmente digitar uma sugestão (artigos, resenhas, melhorias, etc) sem precisar preencher longos formulários. Digite o que quiser na caixinha abaixo e eu lerei com o maior prazer! Se quiser se identificar, fique a vontade!

O PHPit é redigido e mantido por Rafael Jaques - Política de Privacidade.

XHTML/CSS desenvolvido por André Gazola.

PHPit 2007 - 2009 - Alguns direitos reservados.

Feeds ;)

Creative Commons License

PHPit por Rafael Jaques é licensiado sob a Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.