11 Abr
Posted by Diego Albuquerque as Desenvolvimento, Ubuntu, Zenity, Shell Script, Image Magick, Linux

Primeiramente, pra quem não sabe, Nautilus é o gerenciador de arquivos do gnome, conseqüentemente do Ubuntu.
Este pequeno grande texto surgiu da necessidade de redimensionar umas fotos da minha câmera digital que eu queria enviar para uns amigos. Então comecei a procurar por algum programa que fizesse o trabalho sujo, já sabendo que isso poderia ser feito facilmente pela linha de comando utilizando o ImageMagick. Conheces o ImageMagick ? Não ? É simplesmente um pacote de ferramentas para dar nó em pingo d’água no que se refere a manipulação de imagens e tudo isso por linha de comando.
Mas a minha idéia era ter algo gráfico, algo que eu não precisasse abrir um shell e executar um script. Então vi que é possível criar scripts que podem interagir diretamente com o Nautilus. Para tanto basta que você crie o seu shell script normalmente colocando o mesmo dentro do diretório ~/.gnome2/nautilus-scripts. Ah! Um detalhe. O script não pode começar com #!/bin/bash. Então sabendo disso comecei a pensar em como adaptar o meu script que usa o ImageMagick para um que funcionasse interativamente.
Neste momento uma pequena pausa para entender como seria um script simples que redimensionasse todas as imagens de um diretório.
#!/bin/bash
for arquivo in $(ls *.jpg)
do
convert -resize 50 $arquivo redimensionada_$arquivo
done
Este pequeno script irá usar o comando convert (que é parte do Imagemagick) passando para ele o valor de 5o% indicando que a imagem deve ser reduzida pela metade.
Como estamos querendo fazer algo que funcione diretamente no ambiente gráfico não teria sentido deixarmos fixo o quanto a imagem deve ser reduzida, o prefixo que vamos colocar nas imagens redimensionadas e também, por exemplo, o diretório onde elas serão guardadas. Então pesquisando um pouco descobri o pacote Zenity. Este pacote oferece uma ferramenta que permite você criar quadros de diálogos diretamente do shell. Como exemplo do que usaremos temos :
zenity –title ‘Redimensionar’ –entry –text ‘Digite um valor’
O comando acima cria uma caixa de diálogo onde será pedido um valor. Este valor é retornado na saída padrão. Ai me bati para descobrir como capturar este valor e colocar em uma variável. Vale lembrar que não sou nenhum cobra em programação shell script. Então encontrei. Basta fazer :
variavel=$(zenity –title ‘Redimensionar’ –entry –text ‘Digite um valor’)
Outra capacidade do Zenity é criar janelas de progresso.
zenity –progress –pulsate –text “Aguarde processando…” –auto-close
O comando acima cria uma caixa de diálogo que mostra o processamento de um determinado loop, comando, etc. Para que ele funcione é necessário que se passe o resultado do processamento do comando ou loop via pipe para o Zenity. Exemplo:
find $HOME -name ’*.ps’ | zenity –progress –pulsate
Agora só falta saber como é que saberemos, no nosso script, quais foram os arquivos selecionados pelo usuário. Isso é obtido através da variável especial $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS.
Por fim, agora é meter a mão na massa e fazer o script. Lembrando que, o nome que você der ao arquivo do script será o que vai aparecer no menu do Nautilus. No meu caso eu dei o nome : redimensionar fotos.
Eis o script completo:
valor=$(zenity --title 'Redimensionar' --entry --text 'Digite o valor em % a redimensionar')
[ $? -ne 0 ] && exit
prefix=$(zenity --title 'Redimensionar' --entry --text 'Digite,se desejar, um prefixo para as imagens redimensionadas')
[ $? -ne 0 ] && exit
diretorio=$(zenity --title 'Redimensionar' --entry --text 'Digite o diretório de destino')
[ $? -ne 0 ] && exit
mkdir $diretorio
for arquivoatual in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do
arquivo=${arquivoatual#`dirname $arquivoatual`/}
convert -resize $valor% $arquivoatual $diretorio/$prefix$arquivo 2> erro
done | zenity --progress --pulsate --text "Aguarde processando..." --auto-close
Agora toda vez que quiser redimensionar algumas fotos basta selecioná-las, clicar com o botão direito, e escolher : scripts->redimensionar fotos.
E é só, espero que gostem e apreciem o poder do mundo Linux. E tudo feito sem gastar um tostão. :) :)
Inté a próxima

5 Responses
Giderclay
Abril 17th, 2007 at 4:49 am
1Muito legal!!
Muito Boa dica!
MarcosJordao
Abril 19th, 2007 at 8:41 pm
2Ótima dica, eu usava o gThumb para isso, mas direto no nautilus fica mais fácil.
Só uma coisa, eu prefiro especificar o tamanho absoluto ao invés da %, no seu script eu posso retirar o % do comando convert e informar o tamanho absoluto, por ex 800×600.
Por acaso você sabe se tem alguma maneira de calcular proporcionalidade?
Tipo eu informar o width e o height ser calculado automaticamente?
diego
Abril 20th, 2007 at 1:09 pm
3opa Marcos, beleza ?
Olho , no caso do script , eu fiz esperando um valor em %, mas daria pra transformar facilmente ele em qualquer coisa, apenas alterando a linha de comando do ImageMagick.
Quanto as suas perguntas, é sim para todas. :) O ImageMagick é muito poderoso e pelo que pude constar só está limitado a sua imaginação.
Olha este link : http://www.imagemagick.org/Usage/
Ai você vai encontrar a resposta para todos os seus problemas. :) :)
Abraços,
Diego
Rodrigo
Maio 4th, 2007 at 10:36 pm
4Aqui no Ubuntu 7.04 o script só funcionou quando adicionei a linha #!/bin/bash no início do mesmo.
Independentemente disso a dica é maravilhosa! Está de parabéns!
;)
Configurando o meu ambiente de desenvolvimento PHP/Symfony no Ubuntu by ÚltimoLOG
Maio 17th, 2007 at 5:31 pm
5[…] Um outro modo de usar o controle de versão é através de scripts. O Nautilus oferece um suporte a scripts de usuário muito bom que permite que adicionemos várias funcionalidades ao mesmo. Para saber mais um pouco acesse o artigo : Redimensionanando Fotos Diretamente no Nautilus. […]
RSS feed for comments on this post · TrackBack URI
Leave a reply
Significado: Guardar algo para futura consulta. Muito utilizado na informática para arquivar acessos a informações ou serviços para futuras auditorias. Logo, quando dá alguma m*#$%& , o administrador do site vira pro lado, pensa Fu#$*@ e vai logo consultar os últimos logs para ver o que foi que houve.
O ÚltimoLOG surgiu desta idéia de guardar tudo. Os últimos lampejos de criatividade, as últimas idéias, as mais recentes descobertas, ou seja, tudo que for legal para uma futura consulta e o mais importante, tudo em prol de compartilhar o conhecimento. Espero que gostem. ;D
Assine e Acompanhe!
Assine e receba todas as atualizaçõesou Receba por email:
Categorias
Arquivos
Links
Meta
Calendário
Artigos Recentes
Últimos Comentários
Mais comentados
ÚltimoLOG is proudly powered by WordPress - BloggingPro theme by: Design Disease