+1

Marca d’água em tempo de execução em PHP

criado por Benjamin Grando Moreira em 18/03/2007 9:00am
Esse script gera a imagem a partir de uma imagem com o nome enviado via GET. Está sendo assumido que a imagem será em formato JPEG por isso a utilização da função PHP imagecreatefromjpeg().

<?php
$image = imagecreatefromjpeg($_GET['src']);
?>

Você pode tratar para outros formatos de imagens e até outras formas de envio de imagem, mas isso não é o escopo dessa explicação.

Em seguida será feito cálculos de dimensão da imagem que será colocada a marca. Fazemos uso da função getimagesize() que trabalha retornando um array onde o índice "0" = largura e índice "1" = algura.

O procedimento das próximas três linhas de código são: pegar as dimensões imagem que será marcada ($image); subtrair a dimensão correspondente da imagem que é a marca d’água e adicionar 5 pixels na margem.

<?php
$size = getimagesize($_GET['src']);  
$dest_x = $size[0] - $watermark_width - 5;  
$dest_y = $size[1] - $watermark_height - 5;
?>

Juntando a imagem com a marca d’água

Aqui é a função mais complexa do script: imagecopymerge (). A sintaxe oficial para esta função é:

int imagecopymerge ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct )

Você pode ver mais sobre essa função no manual do PHP usando o link http://www.php.net/manual/pt_BR/function.imagecopymerge.php que lhe leva para a versão em português. Em resumo, a linha seguinte de código funde as duas imagens que usam os locais de destino que nós calculamos anteriormente:

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);

Nas linhas finais de código teremos a imagem fundida com a marca d’água como uma imagem JPEG. Usaremos a função imagedestroy() para liberar a memória de todos a imagens carregadas anteriormente com a biblioteca GD.

<?php
imagejpeg($image);  
imagedestroy($image);  
imagedestroy($watermark);
?>

Agora você pode adicionar a marca d’água em qualquer imagem no seu servidor.

Comentários:

Mostrando 1 - 6 de 6 comentários
Mauro disse:
Excelente artigo, claríssimo e objetivo!

Pergunta: como colocar a marca d'água usando um script php para upload?

Assim a própria imagem já ficaria protegida no servidor. Seria útil no caso de usuários que fazem envio de imagens on line.

Ótimo artigo!
20/09/2007 6:45am (~16 anos atrás)

Ótimo artigo...gostei
13/06/2007 12:12am (~17 anos atrás)

Diego Larroyd disse:
Estou com o GD instalado mais nao esta dando de usar o codigo.. esta dando os seguintes erros

imagecopymerge(): supplied argument is not a valid Image resource in C:\http\pepecas\marca_dagua.php on line Warning:
imagejpeg(): supplied argument is not a valid Image resource in Warning:
imagedestroy(): supplied argument is not a valid Image resource in C:\http\pepecas\marca_dagua.php on line
27/04/2007 12:44am (~17 anos atrás)

ou você pode simplesmente descomentar a linha extension=php_gd2.dll
no php.ini e reiniciar o seu apache
27/03/2007 5:17am (~17 anos atrás)

BOZO disse:
Claro que sim, no artigo ele diz isso...

Faça o teste


if(function_exists("imagecreate")){

echo "GD instalada.";

}


se não tiver baixa em http://www.libgd.org/Downloads

19/03/2007 6:19am (~17 anos atrás)

cara, mto bacana seu artigo, porém estou tendo dificuldades pra rodar em servidor local, ou seja, no meu computador, eu tenho que ter o GD instalado, como eu consigo?
19/03/2007 12:38am (~17 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)