Rafael Clares


Marca D’agua em imagens com PHP
Julho 17, 2008, 7:03 pm
Arquivado em: PHP | Tags: , , , ,

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.

easyphp

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

 

Veja outros exemplos

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

Muito legal o post,
é justamente o que estava procurando.

Obrigado

Comentário por alexestudos

Mano num fungo aki!
ele apenas mostrar a foto q num vem pela GET

Comentário por Léoton

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

CAra na ral num entendi o quer vcer dizer com essa liha
$marca = “images/mascara.gif”;
esse gif é o script é q cria esse arquivo?

Comentário por Léoton

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

tá blz…
entao isso vc upa duas imagens…
mas só faz a mascara em uma só q vc passa pela get…
certo?

Comentário por Léoton

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

Muito 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

Junior, muito obrigado pelo comentário.
Fico feliz que tenha gostado.

abraços

Comentário por Rafael Clares

Muito 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

Oi Geena, grato pelo comentário.
Até logo,

Comentário por Rafael Clares

Muito bom…
Procurava isso a tempo.

Comentário por Rogerio

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

Rafael, preciso ao menos que você me diga o que está acontecendo.
até logo

Comentário por Rafael Clares

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

André, preciso ao menos que você me diga o que está acontecendo.
até logo

Comentário por Rafael Clares




Deixe um comentário
Linhas e parágrafos quebram automaticamente, endereços de email não serão mostrados, HTML permitido: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>