Utilizando o PHP para inserir uma marca d’agua em suas imagens
Galera nesse post mostrarei como colocar marca d’agua em imagens de forma dinâmica, ou seja, sem editar as imagens. Criaremos uma pequena aplicação que irá mesclar 2 imagens onde uma será a foto que queremos mostrar e a segunda imagem será a marca d’agua. Faremos com o PHP, então é importante que em seu PHP esteja instalada e ativa a biblioteca GD/GD2. Se você tiver dificuldades para instalar bibliotecas aconselho utilizar o EasyPHP que possui um gerenciador bem simples para ativar a biblioteca no php.

A finalidade é criar dinâmicamente uma galeria com fotos utilizando a marca d’agua sem precisar editar imagem por imagem, dessa forma você preserva/restringe o uso dos direitos das imagens do site. Assim se copiarem a foto do site será copiada com sua marca.
Vejamos o arquivo index.php (ou html)
<html>
<head>
<title>:: Marca D’agua ::</title>
</head>
<body>
<img src=”images/foto2.jpg“ width=”300” height=”250“>
<img src=”water.php?img=foto2“>
</body>
</html>
Perceba que as linhas inserem as imagens são diferentes, isso porque a primeira linha está inserindo comumente a foto do exemplo, já na segunda linha perceba que não estamos passando uma imagem na tag src e sim uma url. O arquivo water.php recebe por metodo get o caminho da foto, neste caso do exemplo o caminho da foto está atribuido à variável img, ou seja img=foto2 indica que o caminho da foto é no mesmo diretório, poderia e até mesmo deveria ser passando o caminho da pasta imagens, mas para não causar uma impressão de “muito código para pouca coisa” eu preferi colocar no mesmo diretório, porém aconselho que façam dessa forma:
< img src=”water.php?img=albuns/1/foto01″ alt=”foto” >
Quero dizer com isso que estruturem os diretórios do seu site/sistema ok !
Passamos então para o arquivo water.php
<?php
#variavel que recebe a url/caminho da imagem
$filename = “images/”.$_GET['img'].”.jpg”;
header(‘Content-type: image/jpeg’);
#dados da mascara [caminho do arquivo que serve de mascara]
$marca = “images/mascara.gif”;
$imagem_marca = ImageCreateFromGif($marca);
$pontoX1 = ImagesX($imagem_marca);
$pontoY1 = ImagesY($imagem_marca);
#recupera as dimensoes da imagem
list($width, $height) = getimagesize($filename);
#definindo tamanho padrão para as fotos
$new_width = 300;
$new_height = 250;
#redesenhando a imagem
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
#Habilitando a opcao abaixo irá criar a mascara com a imagem marca d’agua
ImageCopyMerge($image_p, $imagem_marca, 160, 90, 0, 0, $pontoX1, $pontoY1, 80);
imagejpeg($image_p, null, 100);
imagedestroy($image_p);
?>
Acredito que os comentários no arquivo PHP já dê uma noção do que e como é feita essa junção das imagens.
Na linha:
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
Estamos reconstruindo a imagem que foi passada por get na url (img=foto2)
Na linha:
ImageCopyMerge($image_p, $imagem_marca, 160, 90, 0, 0, $pontoX1, $pontoY1, 80);
O 3º parâmetro (160) é a distância em pixel da esquerda, o 4º parâmetro (90) é a distância em pixel do topo da foto/imagem e também é a posição em que será inserida a imagem que corresponde à marca d’agua, o último parâmetro (80) trata-se da transparência, quanto menor o número mais transparencia terá a imagem da marca d’agua, no caso a .gif atribuida à variável $marca no arquivo php.
No geral o que acontece é que as imagens são mescladas pelo arquivo PHP, então crie uma imagem .gif que servirá de marca d’agua e altere a variável $marca no arquivo PHP.
Veja a imagem sem a marca

Veja como fica no final c/ a marca



Para adiantar algumas eventuais perguntas que possam surgir, as funções do arquivo .php referem-se, como podem ver, à imagens .jpg. Existem as funções apropriadas para cada tipo de imagem, seja .png , .gif ….
Veja todas as funções para tratar imagens no manual php.
Abraços,
Rafael Clares
16 Comentários até o momento
Deixe um comentário
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Muito legal o post,
é justamente o que estava procurando.
Obrigado
Comentário por alexestudos Julho 25, 2008 @ 5:36 pmMano num fungo aki!
Comentário por Léoton Setembro 10, 2008 @ 6:15 pmele apenas mostrar a foto q num vem pela GET
Leoton, poste o código e o endereço das imagens, senão ficará muito difícil te ajudar. até logo
Comentário por Rafael Clares Setembro 10, 2008 @ 6:20 pmCAra na ral num entendi o quer vcer dizer com essa liha
Comentário por Léoton Setembro 10, 2008 @ 6:44 pm$marca = “images/mascara.gif”;
esse gif é o script é q cria esse arquivo?
Leoton, Se você ler denovo post verá o comentário dizendo que é preciso haver uma imagem que servira como a marca d’agua, essa linha que você não entendeu é o caminho do arquivo .gif que será mesclado com todas as fotos. Nesse exemplo essa imagem é que que aparece na frente dos carros “clares autos” é uma gif jogada por cima das imagens. Leia novamente por favor. abraços
Comentário por Rafael Clares Setembro 10, 2008 @ 7:13 pmtá blz…
Comentário por Léoton Setembro 10, 2008 @ 7:23 pmentao isso vc upa duas imagens…
mas só faz a mascara em uma só q vc passa pela get…
certo?
isso mesmo, a imagem usada para a máscara é uma imagem prédefinida(neste caso) ou seja fixa. Mas nada impede que você informe por GET as 2 imagens tanto a mascara quanto a imagem a que se quer aplicar a mascara. abraços
Comentário por Rafael Clares Setembro 10, 2008 @ 7:29 pmMuito bom, pra quem está procurando um GD que dê qualidade na foto esté é o perfeito, muito obrigado, a internet precisa de gente como vc , não de designers egositas como muitos outros, valeuuuu
Comentário por Junior Junho 19, 2009 @ 2:19 amJunior, muito obrigado pelo comentário.
Fico feliz que tenha gostado.
abraços
Comentário por Rafael Clares Junho 19, 2009 @ 11:24 amMuito obrigado pelo tutorial, Rafael. Com algumas pequenas adaptações encaixou perfeitamente no código que eu estou usando e está suficientemente bem expicado.
Comentário por Geena Setembro 3, 2009 @ 5:39 amOi Geena, grato pelo comentário.
Comentário por Rafael Clares Setembro 3, 2009 @ 11:38 pmAté logo,
Muito bom…
Comentário por Rogerio Outubro 4, 2009 @ 4:55 pmProcurava isso a tempo.
Bom, sou novo em php, gostaria de saber se pode me indicar mias informações, pois não consegui fazer.
Obrigado.
Comentário por Rafael Outubro 6, 2009 @ 2:07 amRafael, preciso ao menos que você me diga o que está acontecendo.
Comentário por Rafael Clares Outubro 8, 2009 @ 11:41 amaté logo
Oi rafael! Eu estava procurando isto msm mais não consegui fazer não! :/ Estou iniciando php tenhu aki um upload de foto mais sem a logomarca.E queria que todas as fotos upadas de uma pasta saiam com a minha logo.Agradeço!se puder me ajudar eu lhe agradeço msn= dihfreitah@hotmail.com
Comentário por Andre Freitas Outubro 8, 2009 @ 4:21 amAndré, preciso ao menos que você me diga o que está acontecendo.
Comentário por Rafael Clares Outubro 8, 2009 @ 11:41 amaté logo