Ultimamente, andei à procura de algum plugin para Wordpress que de alguma forma conseguisse fazer marcas de água para as minhas fotografias.
De todos os plugins disponíveis que encontrei, poucos funcionavam. E dos que funcionavam poucos faziam a marca de água como eu gostaria, e desses todos eles acabavam por colocar a marca de água permanentemente na fotografia, impedindo que possa fazer alterações na marca de água, pois o original ficava marcado para sempre.
A solução imediata parecia que teria de por mãos à obra e fazer uma marca de água / assinatura para cerca de +400 fotos, à mão, individualmente para cada foto, e depois substituir cada uma. De repente parecia que iria ser fácil, mas rapidamente mesmo ao ver que usando um sistema de automatação no Photoshop, iria gastar ainda assim muito tempo e não me resolvia o problema a longo prazo, porque teria de colocar as marcas sempre à mão, e sinceramente é um processo que não me agrada muito, é uma forma aborrecida e porque fico sempre com a imagem com a marca permanente, e para evitar isso teria de manter manter mais cópias, entre outros problemas.
Portanto, a solução teria de passar por ter algo que me criasse a marca de água automaticamente (on the fly) por cada vez que a imagem seja requisitada do servidor, sem nunca danificar o original, porque posso querer a qualquer altura mudar a minha marca de água / assinatura.
Os requisitos para esta execução passam por ter um servidor Apache com o módulo mod_rewrite e PHP5 com o módulo GD.
Colocando mãos à obra, precisamos de editar (ou criar, caso não exista) o ficheiro .htaccess, neste caso na raiz do directório do website. Colocamos o ficheiro o seguinte:
<IfModule mod_rewrite.c> RewriteRule ^(.*)wp-content/uploads/((.*)\.(jpe?g))$ //watermark/_watermark.php?src=wp-content/uploads/ [T=application/x-httpd-php,L,QSA] </IfModule>
Genericamente, o que este código faz é:
- 1. Verificar se o módulo Apache mod_reqrite está instalado. Se sim
- 2. Executa em PHP o ficheiro watermark/watermark.php para todas as imagens servidas a partir da pasta wp-content/uploads/
Guardar e fechar o ficheiro .htaccess, daqui não precisamos de mais nada.
De seguida criar uma pasta na raiz chamada de watermark, que é aqui que vamos colocar um ficheiro chamado watermark.php com o seguinte script.
<? $original = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']; waterMark($original); function waterMark($original){ $original = urldecode($original); $info = GetImageSize($original); $width = $info[0]; $height = $info[1]; // a imagem original $new_image = ImageCreateFromJPEG($original); if ($width > 1080){ // barra ao fundo com transparencia $bg = ImageColorAllocateAlpha($new_image, 150, 150, 150, 65); // (PHP 4 >= 4.3.2, PHP 5) imagefilledrectangle($new_image, 0, $height-50, $width, $height, $bg); // criar cores $white = imagecolorallocate($new_image, 255, 255, 255); $grey = imagecolorallocate($new_image, 128, 128, 128); $black = imagecolorallocate($new_image, 0, 0, 0); if ($width >= 1080){ // texto a escrever $text = 'http://fotografia.clerigo.pt'; // caminho até à fonte ttf $font = '/var/www/vhosts/clerigo.pt/subdomains/fotografia/httpdocs/watermark/KhmerUIb.ttf'; // adicionar texto à imagem imagettftext($new_image, 40, 0, 10, $height-10, $white, $font, $text); // texto a escrever $text = date("Y") . ' © João Clérigo '; // caminho até à fonte ttf $font = '/var/www/vhosts/clerigo.pt/subdomains/fotografia/httpdocs/watermark/segoepr.ttf'; // adicionar sombra ao texto imagettftext($new_image, 20, 0, $width-299, $height-15, $black, $font, $text); // adicionar texto à imagem imagettftext($new_image, 20, 0, $width-300, $height-16, $white, $font, $text); } } // finalmente, servir a imagem header("Content-Type: image/jpeg"); ImageJPEG($new_image); imagedestroy($new_image); } ?>
E está feito. A partir de agora, todas as imagens servidas a partir da pasta especificada têm sempre marca de água
De tomar nota dois pontos:
- A marca só está a ser criada para imagens cuja largura seja superior a 1600 pixeis
- São necessárias fontes True Type, que devem ser colocadas numa pasta também no servidor