quarta-feira, 22 de julho de 2009

Tutorial: Marca d’água em imagens com PHP

Tutorial: Marca d’água em imagens com PHP

By Plínio Torres

Como o meu negócio é desenvolvimento web mesmo, não adianta fugir, o negócio é aproveitar a tecnologia! Muitos sites de fotos usam este recurso como um modo de colocar o logotipo do site ou da empresa em fotos postadas na internet de modo a identificar a foto onde quer que ela seja usada. Repare que ficaria mais ou menos assim:

marca.jpg

Um monte de nego tonto segurando uma garrafa? Não! Preste atenção na marca d’água, o logotipo do site em questão embaixo na foto.

Ai o cara tira aquele monte de foto e no dia seguinte com aquele sono e aquela ressaca do caralho vai pra frente do micro postar as imagens no site e fica horas no Photoshop colocando a marca d’água em cada foto, uma a uma. Como diria Seu Creisson, isso é coisia do passadio quando se usia a tecnlogistica modernia!

Vou ensinar aqui passo a passo um script que fiz pra um site de fotos da região que coloca automaticamente a marca nas fotos, conforme elas vão sendo postadas no site em questão, sem precisar manipular nada em um editor de imagens.

Para criar a marca é necessário que haja a biblioteca de manipulação de imagens GD instalada no servidor web, caso não possua, procure no Google como instalar.

Vamos definir a marca que será usada:
logo-php.jpg
Logotipo do nosso poderoso php!

Vamos definir a imagem onde a marca será aplicada:
foto_da_marca.jpg

Lembrando que este script só trabalha com imagens no formato JPG ou PNG!

Agora vamos ao script:

// Definido parâmetros como o endereço das imagens, a posição da marca na imagem, a porcentagem de transparência da marca e onde a marca pronta será armazenada

$foto = “http://200.131.250.31/plinio/blog/foto_da_marca.jpg”;
$marca=”http://200.131.250.31/plinio/blog/logo-php.jpg”;
// Rodapé direito, veja os números correspondentes na função
$posicao=”3″;
// Porcentagem de transparência desejada na marca
$transparencia=”60″;
// Local onde a imagem pronta será armazenada
$saida=”galeria/resultado.jpg”;

class marca_dagua
{
// Construtor, verifica se a biblioteca GD tá no sistema

function marca_dagua()
{
// Verifica se há biblioteca GD no PHP
if(!function_exists(”ImageCreateTrueColor”)) // GD versão 2.*
{
if(!function_exists(”ImageCreate”)) // GD versão 1.*
{
echo “Você não possui a biblioteca GD carregada no PHP!”;
exit;
}
}
}
// Começamos a criar a marca com a função Gera
function gera($imagemfonte, $marcadagua, $imagemdestino, $pos = 0, $transicao = 100)
{
// Obtém o cabeçalho de ambas as imagens
$funcao = $this->verifica_tipo($marcadagua, “abrir”);
$marcadagua_id = $funcao($marcadagua);
$funcao = $this->verifica_tipo($imagemfonte, “abrir”);
$imagemfonte_id = $funcao($imagemfonte);

// Obtém os tamanhos de ambas as imagens
$imagemfonte_data = getimagesize($imagemfonte);
$marcadagua_data = getimagesize($marcadagua);
$imagemfonte_largura = $imagemfonte_data[0];
$imagemfonte_altura = $imagemfonte_data[1];
$marcadagua_largura = $marcadagua_data[0];
$marcadagua_altura = $marcadagua_data[1];

// Aqui, defini-se a posição onde a marca deve aparecer na foto

// Centralizado
if( $pos == 0 )
{
$dest_x = ( $imagemfonte_largura / 2 ) – ( $marcadagua_largura / 2 );
$dest_y = ( $imagemfonte_altura / 2 ) – ( $marcadagua_altura / 2 );
}

// Topo Esquerdo
if( $pos == 1 )
{
$dest_x = 0;
$dest_y = 0;
}

// Topo Direito
if( $pos == 2 )
{
$dest_x = $imagemfonte_largura – $marcadagua_largura;
$dest_y = 0;
}

// Rodapé Direito
if( $pos == 3 )
{
$dest_x = ($imagemfonte_largura – $marcadagua_largura) – 5;
$dest_y = ($imagemfonte_altura – $marcadagua_altura) – 5;
}

// Rodapé Esquerdo
if( $pos == 4 )
{
$dest_x = 0;
$dest_y = $imagemfonte_altura – $marcadagua_altura;
}

// Topo Centralizado
if( $pos == 5 )
{
$dest_x = ( ( $imagemfonte_largura – $marcadagua_largura ) / 2 );
$dest_y = 0;
}

// Centro Direito
if( $pos == 6 )
{
$dest_x = $imagemfonte_largura – $marcadagua_largura;
$dest_y = ( $imagemfonte_altura / 2 ) – ( $marcadagua_altura / 2 );
}

// Rodapé Centralizado
if( $pos == 7 )
{
$dest_x = ( ( $imagemfonte_largura – $marcadagua_largura ) / 2 );
$dest_y = $imagemfonte_altura – $marcadagua_altura;
}

// Centro Esquerdo
if( $pos == 8 )
{
$dest_x = 0;
$dest_y = ( $imagemfonte_altura / 2 ) – ( $marcadagua_altura / 2 );
}
// A função principal: misturar as duas imagens
imageCopyMerge($imagemfonte_id, $marcadagua_id, $dest_x, $dest_y, 0, 0, $marcadagua_largura, $marcadagua_altura, $transicao);

// Cria a imagem com a marca da agua
$funcao = $this->verifica_tipo($imagemdestino, “salvar”);
$funcao($imagemfonte_id, $imagemdestino, 100);
}

// Verifica o tipo da imagem e retorna a função para uso
function verifica_tipo($nome, $acao)
{
if(eregi(”^(.*)\.(jpeg|jpg)$”, $nome))
{
if($acao == “abrir”)
{
return “imageCreateFromJPEG”;
}
else
{
return “imagejpeg”;
}
}
elseif(eregi(”^(.*)\.(png)$”, $nome))
{
if($acao == “abrir”)
{
return “imageCreateFromPNG”;
}
else
{
return “imagepng”;
}
}
else
{
echo “Formato de Imagem Inválido!
A imagem deve ser PNG ou JPEG!”;
die;
}
}
}
// Chama a função de nova imagem a ser criada
$imagem =& new marca_dagua();

// Cria a imagem de acordo com as imagens fonte, posição e transparência
$imagem->gera(”$foto”, “$marca”, “$saida”, $posicao, $transparencia);

// Imprime a imagem final com a marca, com o nome de resultado.jpg
echo “”;
?>

Pronto! Eis ai o resultado do nosso script:
resultado.jpg

Fácil não? É um script muito útil e fácil de implementar…
PHP comanda, hehehe! Até a próxima!

http://pliniotorres.wordpress.com/2007/01/17/tutorial-marca-dagua-em-imagens-com-php/

Um comentário:

  1. é exatament o q procuro, pena q nao funcionou cmg :( erro na linha :

    $dest_x = ( $imagemfonte_largura / 2 ) – ( $marcadagua_largura / 2 );

    ResponderExcluir