Pra isso, você vai precisar de:
- PIL==1.1.7
 - django-easy-thumbnails-watermark==0.6.7
 
Crie uma classe no models.py para tal:
class Visita(models.Model):
 """(Visita description)"""
 data = models.DateField(auto_now_add=True)
 linha1 = models.CharField(max_length=255)
 linha2 = models.CharField(max_length=255, null=True, blank=True,)
 imagem = models.ImageField(upload_to="uploads/visitas/imagem/%Y",help_text="800x671")
 class Meta:
  verbose_name, verbose_name_plural = u"Visita à Fábrica" , u"Visitas à Fábrica"
  ordering = ('-data',)
 def __unicode__(self):
  return u"%s" % self.data
 def gerar(self):
  return 'Gerar' % self.id
 gerar.allow_tags = True
 gerar.is_safe = True
Aqui criei um modelo que tem uma data, por questão de organização, duas linhas para texto que serão inseridas na imagem e a imagem em si.
No urls.py, crie uma entrada para chamada da view:
url(r'^visitas/(?P\d+)/$', 'imagens_facebook.views.visitas', name="visitas"), 
E da view abaixo:
def visitas(request, vid):
 img_obj = get_object_or_404(Visita, id=vid)
 img = '{0}/{1}'.format(settings.MEDIA_ROOT, img_obj.imagem)
 IMAGE = Image.open('{0}/{1}'.format(settings.MEDIA_ROOT, img_obj.imagem))
 WM = {
  'image':'{0}/site/img/visita.png'.format(settings.STATIC_PATH,),
  'position': 'BL',
  'opacity': 1,
  'scale': 1,
  'tile': False,
  'greyscale': False,
  'rotation': 0,
 }
 WK_DONE = watermark_processor(IMAGE, WM )
 path = '{0}/watermarks/visitas/{1}'.format(settings.MEDIA_ROOT, 'imagem.png')
 WK_DONE.save(path, "PNG")
 img = Image.open('{0}/watermarks/visitas/{1}'.format(settings.MEDIA_ROOT, 'imagem.png'))
 draw = ImageDraw.Draw(img)
 font = ImageFont.truetype("{0}/fonts/trebuc.ttf".format(settings.STATIC_PATH),20)
 draw.text((60, 465), img_obj.linha1.upper() ,(55,185,115),font=font)
 if img_obj.linha2:
  draw.text((60, 490), img_obj.linha2.upper() ,(55,185,115),font=font)
 img.save('{0}/watermarks/visitas/{1}'.format(settings.MEDIA_ROOT, 'imagem.png'))
 return force_download(request, path)
Linha a linha temos:
- Definição da View "visitas" que recebe o request e o id da visita, identificado por "vid"
 - Obtenção do objeto visita com o id informado
 - Definição do caminho de onde está a imagem que foi feita upload
 - Abertura da imagem como objeto da Classe Image
 - Definição da WaterMark com o parâmetros necessários:
 - caminho da marca d'agua
 - Posição que será inserida, BL para bottom left
 - Opacidade =1 para não ter transparencia, do contrario coloque valores entre 0 e 1.
 - Escala 1 para não alterar o tamanho
 - Tile é falso para não esticar imagem utilizada como marca d'agua em toda a imagem definida no upload.
 - Escala de cinza falso para sair colorido
 - Sem rotação para sair em orientação normal.
 - Criação da imagem com marca d'agua utilizando o watermark_processor
 - Definição de onde será gerado o arquivo
 - Ação de salvar para gerar o arquivo em png
 - A partir desta linha é onde será escrito o texto dinamico. Aqui abrimos a imagem gerada no passo anterior.
 - Criação de um objeto draw da classe ImageDraw.
 - Definição da fonte a ser utilizada. Aqui será necessário copiar o arquivo da fonte para seu projeto.
 - A escrita do texto proprimente dita com os respectivos parâmetros: posição(left, top), texto a ser inserido, cor em RGB e caminho da font definida no passo anterior
 - Apenas um if para testar se há uma segunda linha no texto.
 - Se houver repete a mesma ação do passo 12, passando o texto diferente.
 - Ação de salvar a imagem para gerar o arquivo físico.
 - View para forçar o download do arquivo gerado. Esta view pode ser vista aqui: http://djangoweb.blogspot.com.br/2011/10/forcando-download-de-arquivos-no-django.html
 
hasta!
Nenhum comentário:
Postar um comentário