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.