Marca d’água em tempo de execução em PHP
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().
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.
Juntando a imagem com a marca d’água
Aqui é a função mais complexa do script: imagecopymerge (). A sintaxe oficial para esta função é:
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.
Agora você pode adicionar a marca d’água em qualquer imagem no seu servidor.
<?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.
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
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
no php.ini e reiniciar o seu apache
27/03/2007 5:17am
(~17 anos atrás)
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
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)
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!