Utilizando o PHP para inserir uma marca d’agua em suas imagens
Atualizado: http://clares.com.br/2012/11/07/gerar-miniatura-php-adicionando-marca-dagua-nas-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
Muito legal o post,
é justamente o que estava procurando.
Obrigado
Mano num fungo aki!
ele 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
CAra na ral num entendi o quer vcer dizer com essa liha
$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
tá blz…
entao 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
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
Junior, muito obrigado pelo comentário.
Fico feliz que tenha gostado.
abraços
Muito obrigado pelo tutorial, Rafael. Com algumas pequenas adaptações encaixou perfeitamente no código que eu estou usando e está suficientemente bem expicado.
Oi Geena, grato pelo comentário.
Até logo,
Muito bom…
Procurava isso a tempo.
Bom, sou novo em php, gostaria de saber se pode me indicar mias informações, pois não consegui fazer.
Obrigado.
Rafael, preciso ao menos que você me diga o que está acontecendo.
até 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= [email protected]
André, preciso ao menos que você me diga o que está acontecendo.
até logo
Olá rafael
muito obrigado por seu tutorial
está bem explicado e fácil de implementar
mas vai uma dica para os q testaram e ñ conseguiram
eu tbm ñ estava conseguindo fazer funcionar
o problema foi q quando copiei o código da página
e colei no editor de código q to usando
as aspas ñ foram reconhecidas como separadores
então tive q digitá-las
e pronto funcionou q eh uma beleza
hehehe
Abs
Olá novamente
rafael vc pode me da uma ajudinha com imagem PNG
bom eu fui no manual e modifique a linha:
$imagem_marca = ImageCreateFromGif($marca);
e coloquei:
$imagem_marca = imagecreatefrompng($marca);
funcionou e tal
so q a transparência da imagem png n ficou legal
veja
http://www.thgcivic.0fees.net/galeria/
Abs
Thiago, dá uma olhada em php.net/imagecreatefrompng … abraços
tem como fazer, mais sem alterar o tamanho da imagem ?
Tem, basta alterar as linhas:
$new_width = 300;
$new_height = 250;
Para:
$new_width = $width;
$new_height = $height;
Olá Rafael, bom dia.
Rapaz eu consegui fazer essa marca d’agua normal, mas só que a imagem fica muito sem qualidade, tanto a imagem normal quanto a logomarca.gif.
Ver aí o meu exemplo neste link;
http://www.antonioalmeidanews.com/water3.php?img=120361312.jpg
Tem como a gente colocar qualidade nas imagens sem que ela fique muito pesada?
..
E só mais uma coisinha, sobre as imagens .png e .gif não aceitam receber a logomarca, elas ficam preta e não aparecem. Como eu faço pro arquivo water.php aceitar todas as extensões de imagens?
Eu procurei muito neste arquivo php.net mas eu não encontrei essa parte das extensões, eu achei umas coisa falando a respeito mas não me ajudou muito pois eu não soube fazer a alteração para o arquivo water.php aceitar todas elas.
Por favor, me ajuda, eu fico aguardando a sua resposta.
Um abraço!
Miler, esse post é bem antigo, dê uma olhada nessa classe do Davi, no link abaixo, é bem mais simples e suporta todas as extensões.
http://www.daviferreira.com/posts/canvas-nova-classe-para-manipulacao-e-redimensionamento-de-imagens-com-php
http://www.multi.com.br/
Preciso fazer um box igual a desse site destaques de locação.
dinamico que apareca a foto e a descricao em cima da mascara teria como me ajudar?
BOA TARDE RAFAEL,
GOSTARIA DE SABER A POSSIBILIDADE DE APLICAR ESSA MARCA D’AGUA NA GALERIA DINAMICA QUE VOCÊ DISPONIBILIZA AQUI NO SITE?
Alberto, você precisa ler os 2 posts e entender o mínimo de PHP para fazer isso!
Boa Tarde, Gostaria de saber o seguinte, eu estou usando Shadowbox.
Com thumb, mas queria usar o water para quando abrir o shadowbox.
<a href="water.php?galeria/grandes/” rel=”shadowbox[Vacation]” >
<img src="thumb.php? img=galeria/miniaturas/” id=”photo_compagny” />
——–
Alguem poderia me ajudar não sei que estou fazendo de errado….
E parabéns pelos posts, o Thumb peguei aqui tbm =D
Oi está faltando o arquivo em href=”water.php?galeria/grandes/”
creio que seria algo como href=”water.php?galeria/grandes/foo.jpg”
Parabéns pelo código amigo, me ajudou bastante.
Olá Rafael Clares acompanho seu blog desde uns 4 meses atrás e hoje gostaria de uma ajuda. gostaria de saber como incrementar esta marca D’água dentro do thumb.php de seu código galeria de fotos free php mysql upload multiplo jquery em (http://blog.clares.com.br/galeria-de-fotos-free-php-mysql-upload-multiplo-jquery/)
se poderes me ajudar seria de grande gratidão.
Obrigado
José, você pode usar o exemplo de outro post que tem no blog.
http://blog.clares.com.br/gerar-miniatura-php-adicionando-marca-dagua-nas-imagens/
Ou se quiser pronto, tem na versão full, acho que deve custar 25,00 a versão full da galeria.
Se eu fosse você, tentaria fazer através do outro exemplo acima.
abs
Oi cara,
quês quanto pra me ajudar.
se pedir não podes me ajudar.
e quando posto algo você recusa.
Amigo, não cobro para ajudar!
Não recuso nenhum comentário, acontece que eles precisam ser moderados e eu, infelizmente, não fico o dia inteiro no blog, ele não me dá nenhum retorno financeiro.
Então, a cada 7, 10 ou 15 dias eu entro aqui e tento responder tudo. Infelizmente, nem sempre eu consigo deixar todo mundo feliz ou resolver tudo.
Poxa valeu mesmo Rafael Clares, funcionou aqui 100%
Deus te abençoe