Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # marqif - Gerador de animacoes estilo Marquee em GIF animado a partir do corte
- # sequencial de uma imagem em frames tomados um determinado numero de
- # pixels cada vez mais a direita.
- #
- # Arkanon <arkanon@lsd.org.br>
- # 2013/03/11 (Seg) 03:55:05 (BRS)
- ### parametros ###
- ### favicon
- strip="dicas-l-fav-strip.gif" # imagem a ser fatiada e transformada em marquee
- anim="dicas-l-fav-anim.gif" # gif animado com o resultado
- ## opt="dicas-l-fav-opt.gif" # gif animado otimizado (nao parece valer a pena)
- framesd="frames" # diretorio dearmazenagem temporaria dos frames
- w1=16 # largura padrao de cada frame
- incr=1 # incremento em pixels de um frame para outro
- delay1=6 # delay padrao entre os frames (centesimos de s)
- delayn=180 # delay no ultimo frame
- loops=0 # numero de loops (0=infinito)
- ### logo
- # strip="dicas-l-big-still.gif"
- # anim="dicas-l-big-anim.gif"
- ### opt="dicas-l-big-opt.gif"
- # framesd="teste"
- # w1=200
- # incr=1
- # delay1=3
- # delayn=3
- # loops=0
- ### script ###
- mkdir -p $framesd
- w=$(identify $strip | cut -d\ -f3 | cut -dx -f1) # largura da tira
- h=$(identify $strip | cut -d\ -f3 | cut -dx -f2) # altura da tira
- echo "$strip ${w}x$h"
- echo "Frames criados a cada $incr px: $((w/incr)) frames"
- echo -n "Posicao X: "
- for x in $(seq 0 $incr $((w-1)))
- # x varia entre todas as colunas da imagem, pulando $incr pixels por vez
- do
- # zeros cabide para $x, de acordo com a largura da imagem
- sx=$(printf %0$(echo -n $w | wc -c)d $x)
- # se a posicao x permite uma fatia a direita com $w1 pixels de largura
- if (( x+w1 <= w ))
- # entao
- then
- # corta uma fatia com essa largura
- convert $strip -crop ${w1}x$h+$x+0 +repage $framesd/frame-$sx.gif
- #senao
- else
- # calcula a largura da fatia auxiliar, da posicao $x ate o final
- w2=$((w-x))
- convert $strip -crop ${w2}x$h+$x+0 +repage $framesd/frame-$sx-p1.gif
- # e a largura de uma fatia auxiliar complementar, do inicio ate completar o frame
- w3=$((w1-w2))
- convert $strip -crop ${w3}x$h+0+0 +repage $framesd/frame-$sx-p2.gif
- # emenda as duas fatias em um unico frame
- convert $framesd/frame-$sx-p{1,2}.gif +append $framesd/frame-$sx.gif
- # apaga as fatias auxiliares
- rm $framesd/frame-$sx-p{1,2}.gif
- fi
- # indica em que posicao da coluna se encontra
- echo -n "$sx "
- done
- echo
- # monta a animacao, definindo
- # quantas vezes dever executa-la,
- # qual a pausa entre os frames exceto o ultimo e
- # a pausa apos o ultimo
- frames_sem_ultimo=$(ls -1 $framesd/frame-*.gif | tail -n+2)
- ultimo_frame=$(ls -1 $framesd/frame-*.gif | head -n 1)
- convert -loop $loops -delay $delay1 $frames_sem_ultimo -delay $delayn $ultimo_frame $anim
- echo "Animacao"
- # otimiza o GIF animado
- # aparentemente, para esse estilo de animacao, a otimizacao nao eh significativa
- #convert $anim -layers OptimizeFrame $opt
- #echo "Otimizacao"
- # se o diretorio de frames nao for o corrente nem a raiz, apaga-o
- [ -d $framesd -a $framesd != . -a $framesd != / ] && rm -r $framesd
- # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement