Advertisement
arkanon

marqif

Mar 11th, 2013
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.11 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # marqif - Gerador de animacoes estilo Marquee em GIF animado a partir do corte
  4. #          sequencial de uma imagem em frames tomados um determinado numero de
  5. #          pixels cada vez mais a direita.
  6. #
  7. # Arkanon <arkanon@lsd.org.br>
  8. # 2013/03/11 (Seg) 03:55:05 (BRS)
  9.  
  10. ### parametros ###
  11.  
  12. ### favicon
  13.     strip="dicas-l-fav-strip.gif" # imagem a ser fatiada e transformada em marquee
  14.      anim="dicas-l-fav-anim.gif"  # gif animado com o resultado
  15.  ##   opt="dicas-l-fav-opt.gif"   # gif animado otimizado (nao parece valer a pena)
  16.   framesd="frames" # diretorio dearmazenagem temporaria dos frames
  17.        w1=16       # largura padrao de cada frame
  18.      incr=1        # incremento em pixels de um frame para outro
  19.    delay1=6        # delay padrao entre os frames (centesimos de s)
  20.    delayn=180      # delay no ultimo frame
  21.     loops=0        # numero de loops (0=infinito)
  22.  
  23. ### logo
  24. #   strip="dicas-l-big-still.gif"
  25. #    anim="dicas-l-big-anim.gif"
  26. ###   opt="dicas-l-big-opt.gif"
  27. # framesd="teste"
  28. #      w1=200
  29. #    incr=1
  30. #  delay1=3
  31. #  delayn=3
  32. #   loops=0
  33.  
  34. ### script ###
  35.  
  36. mkdir -p $framesd
  37.  
  38.  w=$(identify $strip | cut -d\  -f3 | cut -dx -f1) # largura da tira
  39.  h=$(identify $strip | cut -d\  -f3 | cut -dx -f2) # altura  da tira
  40.  
  41. echo "$strip ${w}x$h"
  42. echo "Frames criados a cada $incr px: $((w/incr)) frames"
  43. echo -n "Posicao X: "
  44.  
  45. for x in $(seq 0 $incr $((w-1)))
  46. # x varia entre todas as colunas da imagem, pulando $incr pixels por vez
  47. do
  48.  
  49.   # zeros cabide para $x, de acordo com a largura da imagem
  50.   sx=$(printf %0$(echo -n $w | wc -c)d $x)
  51.  
  52.   # se a posicao x permite uma fatia a direita com $w1 pixels de largura
  53.   if (( x+w1 <= w ))
  54.   # entao
  55.   then
  56.     # corta uma fatia com essa largura
  57.     convert $strip -crop ${w1}x$h+$x+0    +repage $framesd/frame-$sx.gif
  58.   #senao
  59.   else
  60.     # calcula a largura da fatia auxiliar, da posicao $x ate o final
  61.     w2=$((w-x))
  62.     convert $strip -crop ${w2}x$h+$x+0    +repage $framesd/frame-$sx-p1.gif
  63.     # e a largura de uma fatia auxiliar complementar, do inicio ate completar o frame
  64.     w3=$((w1-w2))
  65.     convert $strip -crop ${w3}x$h+0+0     +repage $framesd/frame-$sx-p2.gif
  66.     # emenda as duas fatias em um unico frame
  67.     convert $framesd/frame-$sx-p{1,2}.gif +append $framesd/frame-$sx.gif
  68.     # apaga as fatias auxiliares
  69.     rm $framesd/frame-$sx-p{1,2}.gif
  70.   fi
  71.   # indica em que posicao da coluna se encontra
  72.   echo -n "$sx "
  73. done
  74. echo
  75.  
  76. # monta a animacao, definindo
  77. #   quantas vezes dever executa-la,
  78. #   qual a pausa entre os frames exceto o ultimo e
  79. #   a pausa apos o ultimo
  80. frames_sem_ultimo=$(ls -1 $framesd/frame-*.gif | tail -n+2)
  81.      ultimo_frame=$(ls -1 $framesd/frame-*.gif | head -n 1)
  82. convert -loop $loops -delay $delay1 $frames_sem_ultimo -delay $delayn $ultimo_frame $anim
  83. echo "Animacao"
  84.  
  85. # otimiza o GIF animado
  86. # aparentemente, para esse estilo de animacao, a otimizacao nao eh significativa
  87. #convert $anim -layers OptimizeFrame $opt
  88. #echo "Otimizacao"
  89.  
  90. # se o diretorio de frames nao for o corrente nem a raiz, apaga-o
  91. [ -d $framesd -a $framesd != . -a $framesd != / ] && rm -r $framesd
  92.  
  93. # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement