GD

Aplicando o efeito “Sepia” no PHP com a lib GD

Não existe uma função pronta para aplicar o efeito “sépia” (foto envelhecida) em imagens usando a GD no PHP, porém é bem fácil de conseguir esse efeito fazendo uma combinação de COLORIZE e GRAYSCALE :

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_GRAYSCALE))
{
        imagefilter($img, IMG_FILTER_COLORIZE, 90, 60, 40);
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Resultado – antes e depois:

Aplicando efeitos / filtros em imagens com a GD – Pt 2

Continuando o post anterior, onde mostrei a aplicação dos filtros GRAYSCALE, BRIGHTNESS, CONTRAST e COLORIZE, vamos ver agora a aplicação dos outros filtros disponíveis na função imagefilter() da GD .

Nos exemplos a seguir você verá do lado esquerdo a imagem original, e do lado direito o resultado após a aplicação do filtro. O código vem logo abaixo.

Negativo

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_NEGATE))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

EdgeDetect

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_EDGEDETECT))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Emboss (alto relevo)

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img,IMG_FILTER_GAUSSIAN_BLUR))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Gaussian Blur

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_EMBOSS))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Selective Blur

O efeito desse blur é mais suave que o Gaussian.

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_SELECTIVE_BLUR))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Mean Removal

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_MEAN_REMOVAL))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Smooth

Também funciona como uma espécie de Blur, porém nesse filtro você define a intensidade.  Quanto maior o valor, menor é a intensidade do blur aplicado.

Passando o valor “0″ :

Passando o valor “10″ :

Passando o valor “-5″ :

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_SMOOTH, 10))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Aplicando efeitos / filtros em imagens com a GD – Pt 1

Neste post irei mostrar como podemos aplicar efeitos e filtros em imagens utilizando a lib GD no PHP. Iremos usar basicamente a função “imagefilter”, que nos permite aplicar vários efeitos como preto e branco, mexer no brilho e contraste, etc.

Para não deixar o post gigantesco, irei dividí-lo em partes. Nesta primeira parte, teremos os efeitos: Preto e Branco, Brilho, Contraste e Colorize.

Nos exemplos a seguir você verá do lado esquerdo a imagem original, e do lado direito o resultado após a aplicação do filtro. O código vem logo abaixo.

1. Preto e Branco

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_GRAYSCALE))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

2. Brilho

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_BRIGHTNESS, 40))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Obs. O terceiro argumento aceita um valor positivo (para aumentar o brilho) ou negativo (para diminuir o brilho).

3. Contraste

O contraste tem uma pequena diferença em se tratando dos valores, pois para aumentar o contraste passamos um valor negativo, e para diminuir o contraste o valor deve ser positivo. O exemplo abaixo usa o valor “40″ no filtro IMG_FILTER_CONTRAST :

Já o exemplo abaixo utiliza o valor ” -40 ” como parâmetro, e aí sim, o contraste é aumentado:

Vamos ao código:

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_CONTRAST, -40))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

Filtro de Cor

Este filtro é bem similar ao “grayscale”, sendo que você especifica a cor que deseja aplicar na imagem.  Exemplos abaixo:

Cor usada: #DDA0DD

Cor usada: #008B8B

Vamos ao código (a cor deve ser passada em hexa correspondente aos valores RGB)

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_COLORIZE, 0, 139, 139))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

O  filtro “IMG_FILTER_COLORIZE” aceita ainda um outro argumento, que corresponde ao canal ALPHA, ou seja, da transparência – vai de 0 a 127, onde “0″ é totalmente opaco (não vai fazer diferença) e “127″ é totalmente transparente (o efeito não vai aparecer, a foto vai ficar como a original). Você pode amenizar o efeito da cor usando esse canal. Exemplo abaixo, com a mesma cor usada anteriormente (verde cyan – 0,139,139), agora com transparência (90):

<?php
$img = imagecreatefromjpeg("foto_exemplos.jpg");
if($img && imagefilter($img, IMG_FILTER_COLORIZE, 0, 139, 139,90))
{
	header("Content-type: image/jpg");
	imagejpeg($img);
}
else
{
    echo "Ocorreu um erro.";
}

imagedestroy($img);
?>

No próximo post continuarei com os outros filtros.

Criando thumbnails / miniaturas no PHP com a GD

Vamos então começar com o básico, que é utilizar a GD para criar thumbnails (miniaturas) de fotos.

Para isso, precisaremos criar uma função que calcule o tamanho proporcional da miniatura, de acordo com uma dada largura e altura máximas. Então, vamos à função:

function criaMiniatura($imagem,$destination,$larguraMax,$alturaMax)
{
  $tamanho = getimagesize($imagem);
  $largura = $tamanho[0];
  $altura = $tamanho[1]
  //agora vamos ao calculo da proporcao
  if($largura > $larguraMax)
  {
    $largura = $larguraMax;
    $altura = ($largura * $tamanho[1]) / $tamanho[0];
  }
  if($altura > $alturaMax)
  {
    $altura = $alturaMax;
    $largura = ($tamanho[0] * $altura) / $tamanho[1];
  }

  //abrir a imagem original
  $img = imagecreatefromjpeg($imagem);

  //criamos uma nova imagem em branco, q sera a miniatura
  $thumb = imagecreatetruecolor($largura, $altura);

  //agora, copiamos a foto pra nova imagem
  imagecopyresampled($thumb, $img, 0, 0, 0, 0, $largura, $altura, $tamanho[0], $tamanho[1]);

  //e agora eh soh salvar
  imagejpeg($thumb,$destination,90);
}

Para utilizar a função:

criaMiniatura("foto.jpg","fotothumb.jpg",120,90);

A nova miniatura será salva no formato 120×90,  com o nome “fotothumb.jpg” .