domingo, 28 de setembro de 2014

Galerias de imagens em HTML com o swiggle

Procurava um software para criar galerias estáticas de imagens em HTML faz tempo. Boa parte do que existe por aí são scripts em Perl ou Python, que não me agradam. Acabei chegando no swiggle: um programinha em C, que linka a libc, libexif e libjpeg. Apenas funciona com imagens JPEG. Outros formatos são ignorados.

Não está no repositório do openSUSE nem do Fedora. Antes de compilar na mão, consertei dois bugs.

O makefile para Linux (originalmente foi desenvolvido para FreeBSD) não obedece as variáveis CFLAGS e LDFLAGS, que usamos para passar opções de compilação. A invocação do sed a seguir resolve. O outro é que as páginas de cada imagem ficavam com um (null): <nome do arquivo> no título, resolvido com:

titles-fix.patch

--- html.c.orig 2007-01-14 10:03:36.000000000 -0200
+++ html.c 2014-09-27 17:05:29.627184581 -0300
@@ -41,6 +41,7 @@
 
 #include <sys/param.h>
 #include <errno.h>
+#include <libgen.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -93,7 +94,7 @@
             "<br />\n<b><em>%s</em></b>\n"
             "</td></tr>\n<tr><td width=\"33%%\" align=\"center\" "
             "valign=\"top\">\n", 
-            albumdesc,
+            albumdesc != NULL ? albumdesc : basename(dir),
             imglist[x].filename, 
             imglist[x].filename,
             imglist[x].filename,

Pré-requisitos

openSUSE
# zypper -n in gcc make glibc-devel libexif-devel libjpeg8-devel

Fedora
# yum -y install gcc make glibc-devel libexif-devel libjpeg-turbo-devel

Compilação

$ wget http://homepage.univie.ac.at/l.ertl/swiggle/files/swiggle-0.4.tar.gz
$ tar -xvf swiggle-0.4.tar.gz
$ cd swiggle-0.4
$ sed -i -r 's/^(C|LD)FLAGS /&+/' Makefile.Linux
$ patch -l < titles-fix.patch
$ CFLAGS=$(rpm --eval %{optflags}) make -f Makefile.Linux
$ strip --strip-all swiggle
# make -f Makefile.Linux install

Tendo a estrutura de pastas contendo as imagens dentro de uma pasta principal, rode:

$ swiggle /caminho/para/pasta/principal

(swiggle sem argumentos para opções)

Podemos customizar a aparência colocando um arquivo chamado swiggle.css na pasta principal. Será aplicado a todos os álbuns. Exemplo:

body { font-family: sans-serif; background-color: silver; color: black; }

O programa, contudo, tem um problema grave: se perde com nomes contendo caracteres não-ASCII-7-bit. ☹ Para resolver isso, operações com strings precisam ser convertidas para tipos de dados e funções que usem Unicode. Pode ficar além do meu parco conhecimento em C, porém talvez eu tente levar a empreitada adiante no futuro.

Demonstração



Nenhum comentário:

Postar um comentário