Biblioteca - GIF (gifinfo.pris)

Iniciado por adalberto, Janeiro 05, 2018, 01:28:24 AM

tópico anterior - próximo tópico

adalberto

Seguindo a maratona de formatos de imagens, criei mais uma lib!

Após horas e horas estudando a especificação do formato GIF, criei uma biblioteca ligeiramente completa para extrair informações de imagens gif, tais como: Altura, largura, número de imagens, tempo de transição, etc.

Em anexo a lib e o exemplo de uso.

(caso encontre bugs ou tenha sugestões e críticas informe aqui)

para incluir use:   
  local gif = inclua'gifinfo';
 
  Funções:

  local info, err = gif.info('img.gif');
  O retorno é uma tabela info ou nulo + erro;

A tabela info terá os seguintes campos:

  .id = GIF89a  (ou em alguns casos: 'GIF87a') //--> assinatura + versao do formato
  .formato = GIF //-->assinatura
  .versao = 89a ou 87a
  .num = número de imagens sequenciais da animação gif (as vezes 1, outras mais de 1);
  .tgc = 1 se a tabela global de cor está presente e 0 se está ausente;
  .tam_tgc = <número> tamanho da tabela global de cor em índices;  tam_gtc * 3 = número de bytes
  .icorfundo = <número> índice da cor de fundo na tabela cores
  .res_cor = <número> resolução de cor (geralmente 8 bits por componente para rgb);
  .rap = <número> relação de aspecto de pixels (geralmente 0 = ausente)
  .bpc = <número> bits por componente (o mesmo que res_cor);
  .larg = <número> largura da imagem em pixels
  .alt = <número> altura da imagem em pixels

  .ext_ctrl_grafico[n] = <tabela> extensão de controle gráfico, é uma tabela em que 'n' é um índice número de acordo com o número de imagens embutidas ([1]=primeira imagem etc.) cada indice é uma outra tabela
  com os seguintes campos: (ex.: local resolucao = info.ext_ctrl_grafico[1].res)
     |  [n].res = <num> reservado para o futuro (sem uso atualmente);
     |  [n].met_disp = <num> método de disposição
     |  [n].flag_cor_transp = <num> flag da cor transparente; (1 = sim,  0 = não);
     |  [n].tempo = <num> tempo da transição em centésimos de segundo (1/100);
     |  [n].ict = <num> indice de transparência da cor (na tabela de cores);
     
  .ext_aplicativo = <tabela> extensão para aplicativos guardarem dados, tem os seguintes campos:
     |  .id  = <string> de 8 letras no máximo, nome do aplicativo ex.: FIREFOX, NETSCAPE etc.
     |  .ver = <string> de 3 letras no máximo, verificador, ex.:  '2.2',  'xyz' etc.
     |  .bloco = <tabela> contendo todos os sub-blocos (dados) existentes;
     | |   [1] = {...}, [2] = {...} e assim por diante, cada índice de sub-bloco é um número de 0-255
 
  .ext_comentario[n] = <tabela> contendo índices para cada compentário (string)
     | [1] = "primeiro comentário"; [2]="segundo comentário" e assim por diante.
 
  .info.ext_texto[n] = <tabela> contendo informações de texto para serem inseridos na imagem gif.
   contém os seguintes campos: (Obs. de acordo com a expecificação gif esta extensão foi abandonada
   e deve ser ignorada, possivelmente nenhum gif atual a usa mais.
     | .x = posição coluna (left)
     | .y = posição linha(top);
     | .larg = largura do rótulo (em pixels);
     | .alt = altura do rótulo (em pixels);
     | .larg_car = largura da letra (em pixels);
     | .alt_car = altura da letra (em pixels);
     | .icorletra = <numero> indice da cor da letra (na tabela de cores);
     | .bloco = <tabela> cada índice contém um trecho de texto de 255 caracteres no máximo.
     |  \ [1] = 'primeiro texto' [2] = 'segundo texto' e assim por diante.
     
 

     2ª função:
     
     local tgc = gif.obt_tgc('img.gif');
     
     Obtém a tabela global de cores, cada indice 'n' tem uma pequena tabela contendo o rgb
     tgc[n].r = red, tgc[n].g = green e tgc[n].b = blue
     ou
     tgc[n][1] = red, tgc[n][2] = green e tgc[n][3] = blue
     
     tamanho da tgc = #tgc + 1;  (zero é o primeiro índice; )


Por enquanto é isso.
Até mais.