Quem sou eu

Minha foto

Formado em Computação, desenvolvedor web, interessado em tecnologia, metaleiro e um gamer inveterado.

Pesquisar

sexta-feira, 23 de agosto de 2013

Gerando imagens com marca d'agua com django-watermark 0.1.6-pre1

Algumas vezes é necessário que seja feita um tratamento em imagens, para que estas apresentem o logo ou alguma outra informação. Dependendo da utilização, pode simplesmente colocar as imagens como backgrounds de divs com position absolute dentro de um container. Esta abordagem tem dois pontos negativos:

  1. Alguém com o mínimo de conhecimento conseguirá isolaras imagens através do código fonte e obter a imagem original sem a marca facilmente.
  2. Caso seja necessário integração com algum plugin de compartilhamento de conteúdo em redes sociais, por exemplo, a imagem que o plugin pega também é a original.


Então qual a correta forma de solucionar o problema? django-watermark.


Instalação

Para instalação basta utilizar o pip ou easy_install:

easy_install django-watermark
pip install -U django-watermark

Configuração

Para configurá-lo em seu projeto, adicone o aplicativo no INSTALLED_APPS no settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    ...
    'watermarker',
    ...
)

Execute o syncdb para criar a tabela deste app.

python manage.py syncdb

Opções:


position - Este é bastante personalizável. Primeiro, você pode exibirsua marca d'água em um canto suas imagens usando um dos BR, BL, TR, e TL. Estes representam 'bottom-right', 'bottom-left', 'top-right' e 'top-left', respectivamente.

Alternativamente, você pode usar o posicionamento relativo ou absoluto para a marca d'água. Posicionamento relativo usa porcentagens; posicionamento absoluto utiliza pixels exatos. Você pode misturar e combinar estes dois modos de posicionamento, mas você não pode misturar e combinar relativa / absoluta com o posicionamento canto. Quando se utiliza o posicionamento relativo / absoluto, o valor para o parâmetro de posição é XxY, onde X é o valor da esquerda e o símbolo Y representa o valor superior. Os valores de esquerda e superior devem ser separados com um x minúsculo.

Se você quiser sua imagem marca d'água para mostrar-se no centro de qualquer imagem, você pode utilizar como posição = 50% x50% ou mesmo position = C. Se você queria que a marca d'água para mostrar-se a meio caminho entre as margens esquerda e direita da imagem e 100 pixels da parte superior, você utilizaria = 50% x100.

Finalmente, você pode dizer ao filtro para gerar uma posição para sua marca de água de forma dinâmica. Para fazer isso, use position = R.

opacity - Este parâmetro permite que você especifique a transparência da marca d'água aplicada. O valor deve ser um número inteiro entre 0 e 100, onde 0 é totalmente transparente e 100 é totalmente opaco. Por padrão, a opacidade é fixado em 50%.

tile - Se você quer sua marca d'água para azulejo por toda a imagem, basta especificar um parâmetro como tile= 1. Por padrão, o tile é fixado em 0.

scale - Se você gostaria de ter a marca d'água tão grande quanto possível a imagem de destino e totalmente visível, você pode querer usar scale = F. Se você quiser especificar um fator de escala particular, é só usar algo como scale = 1.43.

greyscale - Se você quer sua marca d'água a ser em tons de cinza, você pode especificar o parâmetro greyscale = 1 e todas saturações de cores vão embora.

rotation - Definir este parâmetro para qualquer inteiro entre 0 e 359 (na verdade, qualquer número inteiro deve funcionar, mas para sua própria sanidade, eu recomendo manter o valor entre 0 e 359). Se você quiser que a rotação ser aleatória, use rotation= R em vez de um número inteiro.

obscure - Defina esse parâmetro como 0 para fazer o nome do arquivo da imagem original do visível para o usuário. O padrão é 1 (ou verdadeiro) para ocultar o nome do arquivo original.

quality - Manter esta a um número inteiro entre 0 e 100 para especificar a qualidade da imagem resultante. O padrão é 85.

random_position_once - Defina como 0 ou 1 para especificar o comportamento de posicionamento aleatório para marca d'água da imagem. Quando ajustado para 0, a marca d'água será colocado aleatoriamente em cada solicitação. Quando ajustado para 1, a marca d'água será posicionado aleatoriamente na primeira solicitação, e os pedidos subsequentes usarão a imagem produzida. O padrão é True (posicionamento aleatório só acontece no primeiro pedido).

Utilização

Sua utilização também é bastante simples. No template que precisar gerar a marca d'agua carrege o filter da aplicação com o comando:

{% load watermarker %}



Exemplos


{{ image_url|watermark:"My Watermark,position=br,opacity=35" }}

Procura uma marca d'água com o nome "My Watermark", coloque-o no canto inferior direito da imagem de destino, utilizando um nível de transparência de 35%.

{{ image_url|watermark:"Your Watermark,position=tl,opacity=75" }}

Procura uma marca d'água com o nome "Your Watermark", coloque-o no canto superior esquerdo da imagem de destino, utilizando um nível de transparência de 75%.

{{ image_url|watermark:"The Watermark,position=43%x80%,opacity=40" }}

Procura uma marca d'água com o nome  "The Watermark", coloca-lo em 43% em relação ao eixo x e de 80% no eixo dos y da imagem do alvo, a um nível de 40% de transparência.

{{ image_url|watermark:"The Watermark,position=R,opacity=10,rotation=45" }}

Procura uma marca d'água com o nome "The Watermark", gera aleatoriamente uma posição para ele, a um nível de 10% de transparência, rotação de 45 graus.

{{ image_url|watermark:"w00t,opacity=40,tile=1" }}

Procura uma marca d'água chamado "w00t", telhas de TI em toda a imagem de destino inteira, a um nível de 40% de transparência.