Original Article: Pngcrush
Author: Glenn Randers-Pehrson
SourceForge

Pngcrush

PNG Now

O Pngcrush é um otimizador para arquivos PNG (Portable Network Graphics). Ele pode ser executado a partir de uma linha de comando em uma janela do MSDOS, ou a partir de uma linha de comando UNIX ou LINUX.

Seu objetivo principal é reduzir o tamanho do fluxo de dados IDG do PNG ao tentar vários níveis de compressão e métodos de filtro PNG. Ele também pode ser usado para remover pedaços auxiliares indesejados, ou para adicionar alguns pedaços incluindo gAMA, tRNS, iCCP, e pedaços textuais.

Pngcrush, quando estaticamente ligado ao código zlib fornecido, é acreditado para ser imune ao zlib-1.1.3 "dupla-livre" bug, uma vez que por padrão, detecta e rejeita qualquer tentativa "dupla-livre". Ele simplesmente gera uma mensagem "Erro de Descompressão" e rejeita o arquivo.

Pngcrush é de código aberto e pode ser usado, modificado e redistribuído por qualquer pessoa sem pagar uma taxa. A licença, incorporada no arquivo pngcrush.c, é equivalente, mas não idêntica à licença do libpng encontrada no arquivo png.h.

A versão atual do pngcrush é identificada aqui.

O código-fonte para pngcrush é aqui.

O código-fonte para pngcrush também pode ser encontrado no repositório "pmt" git. Você pode acessá-lo clonando de git.code.sf.net/p/pmt/code ou github.com/glennrp/libpng. "No momento, a fonte pngcrush está localizado no ramo" pngcrush "

Os executáveis binários são aqui. Pngcrush usa libpng e zlib, ambos estão incluídos nesta distribuição de origem pngcrush. Eles são ligeiramente modificados:

  • pngconf.h do libpng é modificado para "#include pngcrush.h" que é usado
    • para "#define out" partes não utilizadas da biblioteca
    • #defina PNG_SETJMP_NOT_SUPPORTED
    • #defina PNG_ABORT()
    • para definir o IDAT tamanho de buffer para um grande valor e
  • zlib é modificado para definir a macro TOO_FAR para 32767 em deflate.c
  • Os PNGCRUSH_TIMERS de alta resolução estão incluídos no pngread.c e no pngwutil.c.
  • Pngwutil.c é modificado para evitar a avaliação de somas de verificação ADLER32 durante a gravação de saídas de teste.

Se preferir, você pode compilar somente pngcrush.c da distribuição de origem pngcrush e executá-lo com o libpng de ações e o zlib, que podem ser encontrados no site da PNG, www.libpng.org/pub/png/. Se você fizer isto,

  • O pedaço iTXt não será suportado se a sua versão do libpng não suportá-lo. Libpng começará a suportar o pedaço iTXt por padrão com a versão 1.4.0.

  • Pngcrush será vulnerável a várias condições de estouro que foram corrigidos em agosto de 2004, se você usar uma versão libpng não corrigida anterior à versão 1.2.7 / 1.0.17.

  • Pngcrush será vulnerável ao zlib-1.1.3 bug duplo livre, se você ligar pngcrush com zlib-1.1.3 e uma versão de libpng como qualquer 1.0.x que não tenha PNG_USER_MEM_SUPPORTED habilitado.

  • TOO_FAR será 4096 em vez de 32767 em deflate.c,

    O que resultará em arquivos um pouco maiores e uma execução ligeiramente mais rápida.

  • A execução será um pouco mais lenta porque a soma de verificação ADLER32 é Sempre avaliada.

  • Alguns resultados detalhados de tempo de alta resolução não serão relatados.

  • Também, você será incapaz de ler arquivos PNG errôneos com "Demasiados IDAT's".

Binários pré-compilados para Windows (executados na janela do MSDOS) sao aqui

Um garfo de desenvolvimento pngcrush existe, por Cosmin Truta, com um conjunto de características ligeiramente diferente e espaço de pesquisa. Vejo http://www.cs.toronto.edu/~cosmin/pngtech/optipng/"

Pngcrush é um aplicativo de linha de comando. Se você preferir uma GUI draggity-droppity, vários estão disponíveis, incluindo estes que incorporam pngcrush junto com outros compressores / otimizadores de imagem de linha de comando:

  • ImageOptim Para Macs, grátis, licença GPLv2
  • Trimage Para Linux, Windows, Mac, livre, licença MIT

A Apple distribui uma versão modificada do pngcrush. Ele afirma ser o pngcrush real e não informar o usuário das alterações como exige a licença pngcrush. Ele cria arquivos que não são fluxos de dados PNG válidos, uma vez que eles começam com o pedaço CgBI em vez do pedaço IHDR.

O pngcrush modificado pela Apple é capaz de reverter as "otimizações do iPhone" (exceto pela inevitável perda de precisão nos valores de cores subjacentes de pixels não opacos). Existem também aplicativos de terceiros, como o domínio público, o código aberto pngdefry aplicação que pode ser encontrada na rede. Estou obrigado a observar que Apple e iPhone são marcas registradas da Apple, Inc.