Optipng Binary Options


Um guia para otimização de PNG 1. Background 1.1 O formato de arquivo PNG O Portable Network Graphics (PNG) é um formato para armazenar gráficos de quadros compactados. O motor de compressão é baseado no método Deflate RFC1951, projetado por PKWare e usado originalmente em PKZIP. O formato PNG é definido pela Especificação PNG. Esta especificação foi desenvolvida por um grupo ad-hoc chamado PNG Development Group. E é tanto uma Norma Internacional (publicada sob o nome formal ISO / IEC 15948) e uma Recomendação W3C. PNG foi inicialmente concebido como um superior, livre de patentes substituição de GIF. O resultado final é um formato de imagem moderno, extensível e confiável, capaz de lidar com um número impressionante de tipos de imagens (desde imagens em preto-e-branco de 1 bit até imagens RGB de 48 bits com um canal alfa de 16 bits) E orientado por um motor de compressão lossless significativamente mais forte (normalmente 5-25 melhor que GIF). Ao contrário de outros esquemas de compressão sem perdas, a compressão PNG não depende unicamente das estatísticas da entrada, mas pode variar dentro de amplos limites, dependendo da implementação dos compressores. Um bom codificador PNG deve ser capaz de tomar decisões informadas sobre os fatores que afetam o tamanho da saída. O objetivo deste artigo é fornecer informações sobre esses fatores e dar conselhos sobre a implementação eficiente codificadores PNG. 1.2 A compressão PNG A compressão PNG funciona de forma pipeline. Na primeira etapa, os pixels da imagem são passados ​​através de uma transformação aritmética sem perdas chamada filtragem delta. Ou simplesmente filtragem. E enviado mais como uma seqüência de bytes (filtrada). Filtragem não compacta ou de outra forma reduzir o tamanho dos dados, mas torna os dados mais compressíveis. Na segunda etapa, a seqüência de bytes filtrados é passada através do algoritmo de Ziv-Lempel (LZ77), produzindo códigos LZ77 que são ainda comprimidos pelo algoritmo de Huffman na terceira e última etapa. A combinação dos dois últimos estágios é referida como a compressão Deflate. Um algoritmo amplamente utilizado, livre de patentes para compressão de dados universal e sem perdas. O tamanho máximo da janela deslizante LZ77 em Deflate é 32768 bytes, e as correspondências LZ77 podem ter entre 3 e 258 bytes de comprimento. Uma descrição completa da compressão PNG está além do escopo deste guia. A especificação PNG descreve o formato completamente e fornece uma lista completa de referências às tecnologias subjacentes. 2. Fatores que afetam o tamanho do arquivo PNG Como qualquer outro esquema de compactação, a compactação PNG depende das estatísticas dos dados de entrada. Além disso, depende dos seguintes parâmetros específicos de PNG: O tipo de imagem PNG Os filtros PNG delta A estratégia de pesquisa de correspondências LZ77 O tamanho dos buffers Huffman dentro do codificador Deflate Dependendo de como esses parâmetros são escolhidos pela implementação, a compressão PNG Pode variar dentro de limites largos. O processo de seleção da melhor configuração é computacionalmente inviável, mas heurísticas para selecionar uma configuração satisfatória estão disponíveis. O problema de melhorar estas heurísticas constitui um assunto interessante para a pesquisa. 2.1 O tipo de imagem PNG O tipo de imagem PNG é definido no cabeçalho da imagem IHDR. A imagem tem uma certa profundidade de bits, até 16 bits por amostra, e um determinado tipo de cor, a partir de Grayscale para RGBAlpha. Se dois arquivos PNG de diferentes tipos representam exatamente a mesma imagem, cada arquivo pode ser considerado como uma transformação sem perdas do outro. Uma transformação sem perda pode reduzir o fluxo descompactado, e tal transformação é denominada redução de imagem. Na maioria dos casos, as reduções de imagem são capazes de reduzir o fluxo comprimido (o que é, de fato, nosso interesse), como um efeito indireto de reduzir o tamanho da entrada de compressores. As possíveis reduções de imagem são: Redução da profundidade de bits A profundidade de bits pode ser reduzida para um valor mínimo aceitável para todas as amostras. Por exemplo, se todos os valores de amostra em uma imagem de 16 bits tiverem o formulário (2561) n. (Por exemplo 0000, 2323, FFFF), então a profundidade de bits pode ser reduzida para 8, e os novos valores de amostra tornar-se-ão n. (Por exemplo 00, 23, FF). Redução do tipo de cor - Se uma imagem RGB tem 256 cores distintas ou menos, pode ser recodificada como uma imagem de paleta. - Se uma imagem RGB ou Paleta tem apenas pixels cinza, pode ser recodificada como Escala de cinza. Uma redução do tipo de cor também pode permitir uma redução de profundidade de bits. Redução de paleta de cores Se a paleta de cores contiver entradas redundantes (ou seja, entradas duplicadas que indicam o mesmo valor RGB) ou entradas estéreis (ou seja, entradas que não têm um correspondente nos dados de pixel brutos), essas entradas podem ser removidas. Uma redução de paleta de cores também pode permitir uma redução de profundidade de bits. Redução do canal alfa Se todos os pixels de uma imagem GrayscaleAlpha ou RGBAlpha forem totalmente opacos (ou seja, todos os componentes alfa são iguais a 2 bitdepth -1), ou se a informação de transparência puder ser armazenada inteiramente em um pedaço tRNS (muito mais barato), o alfa Canal pode ser despojado. Existem, no entanto, alguns casos em que algumas reduções do tipo de imagem não conduzem necessariamente à redução do fluxo comprimido. O PNG-Tech site contém análises experimentais dessas possibilidades, por exemplo, ver o artigo 8 bits por pixel em paletted imagens. Interlacing, útil para um processamento mais rápido e progressivo, é outro componente do tipo de imagem PNG que afeta a compressão. Em um fluxo entrelaçado, as amostras correspondentes aos pixels vizinhos são armazenadas longe, portanto, os dados nele são menos correlacionados e menos compressíveis. Ao contrário do JPEG, onde o entrelaçamento pode melhorar ligeiramente a compressão, o entrelaçamento PNG degrada significativamente a compressão. 2.2 Os filtros delta PNG O papel da filtragem pode ser ilustrado no exemplo a seguir. Suponha a seqüência 2, 3, 4, 5, 6, 7, 8, 9. Embora tenha muita redundância, a seqüência não é compressível por um compressor Ziv-Lempel, nem por um compressor Huffman. No entanto, se se faz uma transformação simples e reversível, substituindo cada valor pela diferença numérica entre ele eo valor à sua esquerda, a seqüência torna-se 2, 1, 1, 1, 1, 1, 1, 1, que é altamente compressível . O formato PNG emprega cinco tipos de filtros: Nenhum. Esquerda . Acima . Média. E Paeth. O primeiro filtro deixa os dados originais intactos, e os outros quatro estão subtraindo de cada pixel um valor que envolve os pixels vizinhos da esquerda, para cima e / ou na esquerda superior. Um determinado filtro é atribuído a cada linha e é aplicado a todos os pixels dessa linha. Portanto, uma imagem pode ser delta-filtrada em um grande número de configurações possíveis (5 altura), e cada configuração leva a uma saída comprimida diferente. Duas configurações de filtro diferentes podem fazer a diferença no tamanho do arquivo compactado por um par de fatores, portanto, uma cuidadosa escolha de filtros é de suma importância. É possível aplicar um único filtro a todas as linhas ou aplicar filtros diferentes a linhas diferentes. No primeiro caso, o processo de filtragem é fixo no último, é adaptativo. Embora uma pesquisa exaustiva seja inviável, a Especificação PNG sugere uma estratégia de filtragem heurística: Se o tipo de imagem for Paleta ou a profundidade de bits for menor que 8, então não filtre a imagem (ou seja, use filtragem fixa com o filtro Nenhum). (O outro caso) Se o tipo de imagem for Escala de cinza ou RGB (com ou sem Alfa) ea profundidade de bit não for menor que 8, use filtro adaptativo da seguinte maneira: independentemente para cada linha. Aplicar todos os cinco filtros e selecionar o filtro que produz a menor soma de valores absolutos por linha. Os casos em que as heurísticas acima são inferiores ao ideal são mostrados no site da PNG-Tech, por exemplo, ver filtragem heurística vs. força bruta. 2.3 A estratégia de busca de correspondências LZ77 O algoritmo Ziv-Lempel funciona sob a suposição de que seqüências contíguas aparecem repetidamente no fluxo de entrada. Se a seqüência a ser codificada corresponder a uma ou mais seqüências já presentes na janela de histórico deslizante, o codificador envia um par LZ77 (distância, comprimento) que aponta para a correspondência mais próxima. Na maioria das encarnações LZ77, incluindo Deflate, códigos de distância menores são codificados de forma mais concisa. Em Deflate, em particular, os símbolos regulares (não combinados) e os comprimentos de correspondência são enviados para o mesmo codificador Huffman, enquanto as distâncias de correspondência são enviadas para um codificador Huffman separado. Se os resultados LZ77 coincidirem entre os limites aceitos (ou seja, eles não são mais curtos do que 3 e não mais do que 258), uma estratégia gananciosa irá aceitá-los como um substituto para os símbolos a que correspondem. A estratégia gananciosa é preferível ao compactar arquivos de texto, ou muitos tipos de arquivos binários, mas pode ser subóptimo ao compactar dados filtrados, como as seqüências de caracteres de bytes que vêm de um filtro PNG. Os dados filtrados consistem principalmente de valores pequenos com uma distribuição pseudo-aleatória. Portanto, em certas situações, pode ser desejável favorecer a codificação de símbolos individuais, mesmo que existam correspondências que possam substituir esses símbolos. A Biblioteca de Referência do zlib é uma implementação de referência do Deflate, que é mais usada pela PNG Reference Library. Por padrão, o zlib seleciona a estratégia gananciosa, mas o usuário pode especificar sua preferência personalizada por meio do parâmetro de estratégia. Este parâmetro pode ter um dos seguintes valores: - ZDEFAULTSTRATEGY 0. a estratégia de pesquisa avarenta padrão. - ZFILTERED 1. Uma estratégia em que os jogos são aceitos apenas se o seu comprimento é 6 ou maior. - ZHUFFMANONLY 2. uma estratégia rápida em que o algoritmo Ziv-Lempel é inteiramente ignorado, e todos os símbolos da entrada são codificados diretamente pelo codificador Huffman. - ZRLE 3 (apareceu na série zlib-1.2.x), uma estratégia rápida em que o algoritmo LZ77 é essencialmente reduzido para o algoritmo Run-Length Encoding. Por exemplo, a sequência de 10 símbolos aaaaaaaaaa pode ser LZ77 codificada como a, (distância 1, comprimento 9), removendo a distância 1 da imagem, esta codificação pode Ser considerado como uma codificação de comprimento de execução peculiar (que difere do RLE clássico usando o comprimento 9 em vez da contagem 10). O parâmetro de estratégia afeta somente a taxa de compressão. Isso não afeta a correção da saída compactada, mesmo se estiver configurado para um valor inadequado. Foi observado experimentalmente que a pesquisa LZ77 é ocasionalmente capaz de produzir PNGs menores se for menos exaustiva. A razão por trás desse ato reside na mesma categoria de pesquisas estratégicas discutidas aqui. Infelizmente, não há nenhum método conhecido de antecipar qual nível de busca (do mais rápido e do menos exaustivo, ao mais lento e o mais exaustivo) é melhor, além de assumir que o mais exaustivo é melhor na maioria dos casos. Infelizmente, mesmo uma estratégia filtrada nem sempre produz melhores resultados do que uma estratégia gananciosa na entrada filtrada, eo único método conhecido para obter a melhor combinação é por várias tentativas. Experiências e medidas podem, novamente, ser encontradas no site PNG-Tech, por exemplo, ver a proposta de estratégia ZRLE original. 2.4 O tamanho dos buffers de Huffman Como mencionado anteriormente, o codificador de entropia dentro do método Deflate é o algoritmo estático de Huffman. A saída do LZ77 é alimentada em um buffer que ocasionalmente é liberado pelo envio de uma árvore Huffman estática seguido por todos os códigos Huffman, para a saída de Deflate. Depois disso, tanto o buffer quanto a árvore Huffman são redefinidos, aguardando os códigos LZ77 subseqüentes para vir e reabastecer o buffer. A especificação Deflate refere-se aos códigos Huffman dinâmicos. No entanto, este é um misnomer, em que o termo dinâmico é usado em contraste com os códigos fixos Huffman. Os códigos fixos de Huffman são construídos simplesmente de acordo com uma árvore de Huffman predefinida, sem consideração às freqüências reais do símbolo. Os códigos Huffman dinâmicos referidos pela especificação Deflate não são construídos pelo algoritmo Huffman dinâmico, como definido, por exemplo, por Faller, Gallager e Knuth (o algoritmo FGK), ou por Vitter (o algoritmo V). A árvore Huffman predefinida foi introduzida no PKZIP como uma alternativa de compressão rápida, mas produz resultados ruins mesmo no texto, e é quase inútil na compressão PNG. Ainda assim, um fluxo PNG que contém códigos criados pela árvore Huffman fixa (predefinida) é um fluxo válido e um leitor PNG compatível deve decodificar esse fluxo corretamente. É desejável estabelecer os limites do tampão de modo que as sequências de acordo com o mesmo modelo de probabilidade encaixem no mesmo tampão de Huffman. Existem métodos para abordar esses limites, mas eles não são usados ​​na implementação do mainstream Deflate. Em vez disso, os buffers são liberados quando um limite (normalmente, 16k códigos LZ77) é atingido. Esta é, no entanto, uma abordagem rápida, e os resultados são satisfatórios. O tamanho dos buffers de Huffman é indiretamente determinado pelo nível de memória (uso) dos codificadores. Por esta razão, certos níveis de memória podem ser bons para certos tipos de imagens. 3. Programas de optimização PNG (lossless) A multiplicidade de programas de codificação PNG está listada em libpng. org/pub/png/pngapps. html. Seu desempenho varia tanto quanto o intervalo de possíveis razões de compressão, os bons codificadores são pelo menos aplicando a heurística de filtragem, descrita brevemente na Especificação PNG e ilustrada acima. Alguns programas ganham compressão extra, descartando alguns dos dados nas imagens de entrada (assim estes programas são lossy) Esta seção contém a pequena lista de programas de otimização PNG que mostram uma preocupação especial para obter um tamanho de arquivo tão pequeno quanto possível. Eles trabalham executando testes de compressão repetidos, aplicando vários conjuntos de parâmetros e selecionando o conjunto de parâmetros que produz a menor saída compactada. Pngrewrite por Jason Summers, disponível em pobox / jason1 / pngrewrite. É um programa open-source que executa reduções de imagem sem perdas. Ele funciona melhor em conjunto com pngcrush (veja abaixo), o usuário deve executar pngcrush após pngrewrite. Pngcrush por Glenn Randers-Pehrson, disponível em pmt. sourceforge. net/pngcrush. É um programa open-source que itera sobre filtros PNG e parâmetros zlib (Deflate), comprime a imagem repetidamente usando cada configuração de parâmetro, e escolhe a configuração que produz a saída mais pequena comprimida (IDAT). Na opção de usuários, o programa pode explorar poucas (abaixo de 10) ou muitas (uma travessia de força bruta em mais de 100) configurações. O método de selecção dos parâmetros para poucos ensaios é particularmente eficaz, e o uso de uma travessia de força bruta não é geralmente recomendado. Além disso, pngcrush oferece uma infinidade de recursos extras, como a recuperação de arquivos PNG errados (por exemplo, arquivos que contêm CRCs ruins) e edição em nível de bloco de metadados PNG. OptiPNG por Cosmin Trua, disponível em cs. toronto. edu/pngtech/optipng. É um programa open-source mais novo, inspirado do pngcrush. Mas projetado para ser mais flexível e correr mais rápido. Diferentemente pngcrush. OptiPNG executa os ensaios inteiramente na memória, e escreve somente o arquivo de saída final no disco. Além disso, ele oferece várias opções de otimização para o usuário, que pode escolher entre uma gama de opções de muito poucos ensaios para muitos ensaios (em contraste com o mais grosso inteligente versus bruta opção oferecida pela pngcrush). É importante mencionar que a proporção de compressão alcançada é cada vez menos provável de melhorar quando estão sendo usadas presets de nível mais alto (trigerring mais ensaios). Mesmo que o programa seja capaz de pesquisar automaticamente mais de 200 configurações (e os usuários avançados têm acesso a mais de 1000 configurações), uma predefinição que seleciona cerca de 10 tentativas deve ser satisfatória para a maioria dos usuários. Além disso, um preset que seleciona entre 30-40 testes deve ser satisfatório para todos os usuários, pois é muito, muito improvável que seja espancado significativamente por qualquer busca mais ampla. AdvanceCOMP by Andrea Mazzoleni é um conjunto de ferramentas para otimização de arquivos ZIP / GZIP, PNG e MNG, com base em um conjunto de ferramentas para otimizar os arquivos ZIP / GZIP, PNG e MNG. No poderoso mecanismo de deflação 7-Zip. O nome da ferramenta de otimização PNG é AdvPNG. No momento da redação deste artigo, o AdvPNG não realiza reduções de imagem, portanto, o uso de pngrewrite ou OptiPNG antes da otimização pode ser necessário. Entretanto, dados os effectivenes da deflação 7-Zip, AdvanceCOMP é um contendor poderoso. O conjunto de ferramentas AdvanceCOMP é uma parte do projeto AdvanceMAME, disponível em advancemame. sourceforge. net. PNGOut por Ken Silverman, disponível em advsys. net/ken/utils. htm. É um programa compilado livremente disponível (sem código fonte), executado em Windows e Linux. De acordo com nossos testes, a taxa de compressão alcançada pelo PNGOut é comparável à de AdvPNG. Infelizmente, devido à falta de informações, não podemos dizer muito sobre esta ferramenta. 4. Uma nota extra sobre losslessness O que é lossless optimização PNG, afinal Esta é uma pergunta simples, cuja resposta é intuitiva, mas não tão simples. A perda de pureza no sentido mais estrito, onde nenhuma informação é perdida, só pode ser obtida deixando o arquivo original (qualquer arquivo) intacto, ou transformando-o (por exemplo, compactando-o, criptografando-o) de tal forma que haja uma transformação inversa Que o recupera completamente, pouco a pouco. No caso de imagens PNG, esta condição de losslessness estrito tem pouca relevância para o usuário de gráficos casuais, e é, portanto, muito forte. Há casos em que é necessária uma estrita perda de dados, por exemplo, ao manusear arquivos PNG certificados cuja integridade é garantida por uma soma externa como MD5 ou SHA. Ou por uma assinatura digital como dSIG. Na maioria das vezes, no entanto, é desejável para relaxar a noção de perda de PNG, na medida em não perder qualquer informação que pertence à imagem renderizada e para o valor semântico dos metadados que acompanha a imagem. Isso permite que o usuário se concentrar no que é realmente importante quando se trata de preservar o conteúdo de uma imagem PNG, e permite o conceito de ferramentas de otimização PNG. Uma transformação sem perdas de um arquivo de imagem PNG é uma transformação que preserva totalmente os triplos RGB renderizados (os triplos RGB que vêm diretamente, ou a partir de um índice de paleta ou de uma expansão RGB cinza), a transparência renderizada (as amostras alfa que Ou diretamente, ou de um pedaço tRNS, ou a opacidade implícita assumida devido à falta de qualquer informação explícita de transparência), a ordem de renderização (sequencial ou entrelaçada) e a semântica contida pelos pedaços auxiliares. Esta definição permite a execução das operações de redução de imagem acima mencionadas e a recompressão do IDAT. Também permite a alteração ou a eliminação de outras informações tecnicamente válidas, mas que não influenciam qualquer apresentação dos pixels da imagem: A informação que pertence aos fluxos Deflate, seja dentro do IDAT. Ou em outros pedaços comprimidos como zTXt. ITXt ou iCCP, e. O tamanho da janela LZ77, o tipo eo tamanho dos blocos Deflate, etc. (A única coisa que importa é que a seqüência de bytes descompactada deve permanecer a mesma.) A ordem das entradas de paleta dentro de um pedaço PLTE. (Ao alterar essa ordem, as informações que dela dependem, como os pixels codificados em paleta ou as informações tRNS, devem ser atualizadas adequadamente.) As triplas RGB que não correspondem a nenhum pixel na imagem real, mas são armazenadas em um TRNS pedaço. Entradas tRNS completamente opacas em uma imagem de paleta. Correção de gama (gAMA) ou informação de bit significativo (sBIT) dentro de uma imagem que consiste exclusivamente em amostras cuja intensidade seja mínima (0) ou máxima (2 bitdepth -1). O fato de que um comentário textual é armazenado descompactado em um pedaço tEXt, ou comprimido em um pedaço zTXt, ou sem tradução em um pedaço iTXt. Etcetera. Se qualquer uma das informações descartáveis ​​é importante em um aplicativo específico e a otimização PNG sem perdas ainda é desejável, recomenda-se armazenar essas informações em blocos auxiliares, em vez de cortá-lo dentro de blocos críticos. Por exemplo, se forem necessárias entradas de paleta estéril (por exemplo, para etapas de edição posterior), recomenda-se armazená-las dentro de um pedaço de paleta sugerida (sPLT), em vez de mantê-las dentro de PLTE. 5. Bibliografia seletiva Além das especificações discutidas, as referências abaixo fornecem informações essenciais necessárias para compreender o conteúdo deste artigo. Thomas Boutell, Glenn Randers-Pehrson et ai. Portable Network Graphics (PNG) Especificação, Segunda Edição. ISO / IEC 15948: 2003 (S) Recomendação do W3C 10 de novembro de 2003. David A. Huffman. Um método para a construção de códigos de redundância mínima. Em Proceedings do Instituto de Engenheiros de Rádio. Vol. 40, no. 9, pp. 1098-1101, setembro de 1952. Jacob Ziv e Abraham Lempel. Um algoritmo universal para compressão de dados. IEEE Transactions on Information Theory. Vol. IT-23, n. 337-343, maio de 1977. Devido a um acidente histórico, o famoso algoritmo é mais conhecido como o algoritmo de Lempel-Ziv (LZ), embora o algoritmo Ziv-Lempel seja um nome mais legítimo. Greg Roelofs. PNG: O guia definitivo. OReilly and Associates, 1999. Cópia de direitos autorais 2003-2008 Cosmin Trua. Permissão para distribuir livremente. Apareceu: 7 de abril de 2003. Última atualização: 10 de maio de 2008. O utilitário de linha de comando optipng como um fluxo legível / gravável. Isto é útil para situações onde você não quer se preocupar em escrever a entrada para o disco e ler a saída depois. Se você não tem um binário optipng em seu PATH, o nó-optipng tentará usar um dos binários fornecidos pelo pacote optipng-bin do nó. O construtor opcionalmente tem uma matriz de opções de linha de comando para o optipng binário: OptiPng como um serviço web: Certifique-se de que você tem node. js e npm instalado, em seguida, execute: Licença BSD de 3 cláusulas - consulte o arquivo LICENSE para obter detalhes. Você não pode executar essa ação neste momento. Você fez login com outra guia ou janela. Atualize para atualizar sua sessão. Você efetuou login em outra guia ou janela. Recarregue para atualizar sua sessão. O utilitário de linha de comando optipng como um fluxo legível / gravável. Isso é útil para situações onde você donapost quer se preocupar em escrever a entrada para o disco e ler a saída depois. Se você donapost tem um binário optipng em seu PATH, o nó-optipng tentará usar um dos binários fornecidos pelo pacote nó-optipng-bin. O construtor opcionalmente tem uma matriz de opções de linha de comando para o optipng binário: OptiPng como um serviço web: Certifique-se de que você tem node. js e npm instalado, em seguida, execute: Licença BSD de 3 cláusulas - consulte o arquivo LICENSE para obter detalhes. Nunca foi tão fácil gerenciar equipes de desenvolvedores com várias permissões e vários projetos. Saiba mais sobre Pacotes Privados e Organizaçõeshellip Lista de Colaboradores Experimente Dependências (4) Você Precisa de Ajuda

Comments

Popular posts from this blog

Jo Forex

00011 Binary Options

Cicli E Forex Pdf Ebook