sexta-feira, 23 de março de 2007

Gerador de Galeria em HTML (Python)

Este vai ser o meu primeiro post sobre aplicações escritas por mim.

O que é que então isto faz?

É um script que na altura em que usava Linux fiz em Python para gerar uma galeria de fotos em html a partir de um directório com fotos, pois precisava de o fazer porque tinha um directório com várias fotos e "colocar" uma foto de cada vez em código html é trabalhoso, por isso aproveitei uma biblioteca de Python e pus mãos à obra.

A minha primeira dificuldade foi certamente criar uma thumbnail da imagem em questão, por isso dei uma visita ao Google (http://www.google.pt) e rapidamente encontrei o que queria: Python Imaging Library (http://www.pythonware.com/products/pil/). É óbvio que não sabia como trabalhar com este, então disse a mim mesmo: RTFM, fi-lo e em questão de minutos já sabia minimamente o que queria.

Primeiro de tudo tive que indicar que imagem abrir, para isto atribuí a uma variável o resultado de

Image.open(imagem)


 

Em que imagem será uma variável com o caminho da foto/ficheiro.

Também declarei outra variável: THUMBSIZE, em que atribuí a esta a largura e altura da thumbnail (230x153), mais propriamente o valor 230,153. Após isto utilizei a função

Thumbnail

da biblioteca PIL (Python Imaging Library) para a criar, que tem a seguinte sintaxe:

Img (esta foi uma variável criada por mim em que terá como valor o resultado de image.open(imagem) – img.thumbnail(THUMBSIZE)


 

OK. Já tenho a thumbnail da imagem, agora tenho que a salvar… mas há um problema: Imaginemos que o utilizador do script já o correu anteriormente, mas agora acrescentou mais imagens, só que as thumbnails das imagens já existentes encontram-se no directório… como fazer para não criar uma thumbnail de uma thumbnail?

É simples, basta utilizar um if para verificar se as primeiras 5 letras da variável imagem são constituídas pela palavra thumb

If imagem[0:5] != "thumb":

Após esta verificação, caso o resultado seja Verdadeiro e não Falso, o script vai executar o que vem a seguir a esta condição:

Img.save('thumb.' + str(imagem), "JPEG")

Ou seja, o ficheiro ficará: thumb.Foto1.JPG note-se aqui o uso da função str() para converter o valor de imagem para uma string (cadeia de caracteres alfanuméricos). Basicamente a função save do PIL é para salvar num ficheiro as alterações feitas à imagem.

E pronto, temos o problema de criar as thumbnails resolvido.

Aqui abaixo segue-se o código completo do script.

#!/usr/bin/env python


 

# Alto Circuito Galeria

# Por Alexandre Garcia (c) 2006

# Wed, 06 Dec 2006


 

import os, time, string, Image, glob


 

THUMBSIZE = 230, 153

PATH = "/home/amg/AC_fotos/" # Alterar para o directorio das fotos

HTML = PATH + "index.html"

TITLE = "Alto Circuito Lan Party I - Fotos" # Alterar para o titulo do site

ficheiro = open(HTML,"w")


 

def converter():

    os.chdir(PATH)

for imagem in glob.glob("*.JPG"):

img = Image.open(imagem)

img.thumbnail(THUMBSIZE)

        if imagem[0:5] != "thumb":

    img.save('thumb.' + str(imagem), "JPEG")


 

def gerar():

    os.chdir(PATH)

    imgthumb = glob.glob("thumb.*")

    ficheiro.write("<html><head><title>" + TITLE + "</title></head><body><font size=\"4\"><b><center>" + TITLE + "</b></font><br><br>")

    for thumb in imgthumb:

        thumb = '<a href=\"' + str(thumb).strip('thumb.') + '\">' + '<img src=\"' + thumb + '\">' + '</img>' + '</a>' + ' '

        ficheiro.write(thumb)

    ficheiro.write("<br><br><font size=\"2\">Actualizado em " + time.strftime("%d-%m-%Y %H:%M:%S") + "<br>Galeria Alto Circuito - Script feito por <a href=\"mailto:alexmgarcia@tux-linux.net\" style=\"text-decoration:none\"><b>Alexandre Garcia</b></a> (c) 2006</font></center></body></html>")

    ficheiro.close()


 

converter()

gerar()


 

Haja saúde para todos!

Sem comentários: