Com uma boa dose de "nerdice", e usando um ambiente Unix eu resolvi o problema. Mas para usarem precisa menos "nerdice", mas precisa de um bando de ferramentas comuns ao Unix, portanto, usuários de Mac OS X estão na vantagem.
Netpbm
Todo o processamento pesado é feito com um script e usando o Netpbm. O Netpbm é um conjunto de programas que convertem diversos formatos de imagem para um formato nativo dele, e vice-versa, e mais um conjunto de programas para trabalhar com as imagens. Tem programas para rotação, mudança de tamanho, colocação de imagens sobrepostas etc. Maiores detalhes no site do projeto.
Gerador de amostras
Agora vamos ao script. Ele aceita na linha de comandos uma série de arquivos JPEG, reduzindo o tamanho, rotacionando se necessário, colocando logotipo, e finalmente gerando um novo JPEG em um diretório de saída. Os originais não são modificados.
Para usar basta fazer algo como o exemplo abaixo:
gera_amostas.sh imagem1.jpg imagem2.jpg imagem3.jpg imagem32*.jpg
O programa está abaixo
----- 8x ----- Corte aqui ----- Cut here -----
#!/bin/sh
#
# Autor: João Rocha Braga Filho (JGoffredo)
#
# Versão 2.0.0
#
# Licença GPL
#
tamanho=500000
logo=~/trabalho/imagens/gimp/Logo/JGoffredo_003.pnm
destino=~/trabalho/imagens/00_Reduzidas/
for i in $*
do
nome=`basename $i`
if ! test -f $destino$nome
then
ident=/tmp/gera_amostra$$
pbmtext -builtin fixed $nome > $ident
case `jpegexiforient $i` in
1)
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
;;
8)
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamflip -ccw | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
;;
*)
echo -n "Rotacao desconhecida: $i. Tecle Enter: "
read a
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
;;do
nome=`basename $i`
if ! test -f $destino$nome
then
ident=/tmp/gera_amostra$$
pbmtext -builtin fixed $nome > $ident
case `jpegexiforient $i` in
1)
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
;;
8)
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamflip -ccw | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
;;
*)
echo -n "Rotacao desconhecida: $i. Tecle Enter: "
read a
jpegtopnm < $i | pnmscale -pixels=$tamanho | pamcomp -valign=top -align=left -opacity=0.35 -xoff=10 -yoff=10 $logo | pamcomp -valign=bottom -align=left -opacity=0.35 -xoff=10 -yoff=-10 $ident | pnmtojpeg -quality=95 > $destino$nome
esac
rm $ident
touch -r $i $destino$nome
fi
done
----- 8x ----- Corte aqui ----- Cut here -----
Tem 3 variáveis, tamanho, logo e destino, que definem detalhes de funcionamento. A variável tamanho está configurada para meio Mega pixel, um bom tamanho para Orkut, Facebook etc. A variável logo é o arquivo com o seu logotipo, que deve estar em um formato nativo do Netpbm. Use o
jpegtopnm se seu logo está em JPEG, ou o tifftopnm se o seu logo está em TIFF. Note, já tem que estar no tamanho final que você o quer na imagem. A variável destino diz onde quer que os arquivos finais sejam gravados.
Se já existir um arquivo com o mesmo nome no diretório destino, não será sobre-escrito, e nenhum processamento será feito. Portanto é bom o diretório destino estar vazio.
Bugs
Só foram feitas duas rotações, por preguiça minha, mas as outras não são difíceis.
Este script está um pouco modificado em relação ao que está no meu computador, portanto pode ter algum bug que introduzi na modificação e não percebi.
Nenhum comentário:
Postar um comentário