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
Disponível a 5º edição da codificando.net
Entrevistas com Profissionais de Infra e Desenvolvimento
|
|
- Coluna: SQLServer 2005
- Metodologias Ágeis - 2° XNA Challenge - SQL Server 2008 - Base Class Library E muito mais… |
Arquivado em: PHP, PostgreSql | Tags: banco de dados, conexao, PHP, postgre, PostgreSql
Tenho visto muito o pessoal procurar artigos e tutoriais sobre PHP e percebi que a busca por banco de dados ainda é pouca. Pensei em mostrar aqui como se conectar à um banco de dados SQL, afinal de contas o PHP apenas para cálculos e comandos de servidor não é tãoooo divertido embora eu ache fascinante!
Veremos como se conectar ao PostgreSql que é o que eu utilizo como SGBD (sistema gerenciador de banco de dados), o pessoal tem utilizado muito o MySql que também é excelente, gosto mais do PostgreSql devido aos padrões mantidos estarem mais próximos do SQL. (Se ainda não tem instalado baixe em PostgreSql).
Bem, o postgre como muitos (ou todos) os SGBD’s devem receber como parâmetros os dados de conexão, tais como, usuário, senha, host, port, base.
No PHP o comando utilizado para conectar-se ao PostgreSql é o pg_connect(“parâmetros”), então nada melhor do que começarmos e iremos fazer isso com uma classe (Classes c/ PHP5) !
O arquivo conexao.class.php (o .class é apenas para identificarmos o arquivo como uma classe).
<?
Class Conexao
{
protected $host = “localhost”;
protected $user = “postgres”;
protected $pswd = “postgres”;
protected $dbname = “teste”;
protected $con = null;
function __construct(){} //método construtor
#método que inicia conexao
function open(){
$this->con = @pg_connect(“host=$this->host user=$this->user
password=$this->pswd dbname=$this->dbname“);
return $this->con;
}
#método que encerra a conexao
function close(){
@pg_close($this->con);
}
#método verifica status da conexao
function statusCon(){
if(!$this->con){
echo “<h3>O sistema não está conectado à [$this->dbname] em [$this->host].</h3>”;
exit;
}
else{
echo “<h3>O sistema está conectado à [$this->dbname] em [$this->host].</h3>”;
}
}
}
?>
Set os valores das variáveis host, user, pswd e dbname
host = geralmente localhost ou seu ip
user = usuário que criou ao instalar o postgre
pwsd = senha do usuário do postgre
dbname = a base que deseja se conectar no postgre
Como eu havia dito pg_connect() é o método PHP que conecta-se ao PostgreSql, o ‘@’ antes do método serve para inibir/ocultar as mensagens de erro do método caso ocorram durante a tentativa de conexao. Você pode retira-la e testa-la informando algum valor incorreto nas variáveis de conexão. Geralmente ocultamos essas mensagens para que um visitante ao acessar seu sistema não veja os parâmetros utilizados ou nomes de váriaveis que você utiliza na conexão, em outras palavras, ocultamos as mensagens por segurança. Existem outras formas de tratar os erros e as mensagens com segurança, mas isso não será abordado aqui. Ao menos nesse post, não!
Os valores contidos como parâmetros em pg_connect() são os valores das variáveis setadas no inicio da classe. Seria interessante criar métodos para setar os valores de variáveis de conexao apenas se você precisasse utilizar mais de um banco (não base, banco) na sua aplicação, para evitar criar 2 classes diferentes poderiamos fazer um método do tipo setUserBanco(), setHostBanco(“localhost 2″), entendeu ? ok!
Mas como trata-se apenas de 1 conexão, seria muitos métodos para pouca coisa!
O método open() retorna o estado da conexao (true ou false), com isso podemos através do método statusCon() saber se a conexao está ativa ou não.
O método close(), como você imaginou encerra a conexao chamando o método PHP pg_close();
Crie agora o arquivo index.php para testarmos a conexao
<?
#incluindo a classe conexao (supondo estar no mesmo diretorio)
include(‘conexao.class.php’);
#instanciando o objeto
$minhaConexao = new Conexao();
#chamada ao metodo open que abra a conexao
$minhaConexao->open();
#verificando o status da conexao
$minhaConexao->statusCon();
#encerrando a conexao
$minhaConexao->close();
#verificando a conexao apos close();
$minhaConexao->statusCon();
?>
É isso pessoal, bem simples e num post futuro veremos como gravar/editar/atualizar/excluir registros de uma tabela usando o PHP e PostgreSql.
Deixei um vídeo tosco mostrando/explicando melhor como funciona essa classe.
Dê uma olhada no vídeo aqui
Abraços,
Rafael Clares
