PNG é a combinação de Filters + LZ77 + Huffman (a combinação de LZ77 + Huffman é chamada Deflate) nessa ordem:
etapa 1) se o filtro for diferente de Nenhum, o valor dos pixels será substituído pela diferença dos pixels adjacentes (para obter mais detalhes, consulte http://www.libpng.org/pub/png/book/chapter09.html ) . Isso aumenta a compactação das imagens com gradientes (então ... 4 5 6 7 fica ... 1 1 1 1) e pode ajudar em áreas da mesma cor (... 3 3 3 5 5 5 5 5 5 fica 0 0 0 2 0 0 0 0 0). Por padrão, os filtros são ativados em imagens de 24 bits e desativados em imagens de 8 bits com uma paleta.
etapa 2) os dados são compactados com o LZ77, que substitui seqüências repetidas (correspondências) de bytes por uma tupla que contém a distância da correspondência e a duração da correspondência.
passo 3) o resultado do passo 2 é codificado com o código Huffman que substitui símbolos de comprimento fixo por códigos de comprimento variável, quanto mais frequente o símbolo, menor o código.
Existem vários problemas:
Uma pequena alteração que afeta poucos pixels resultará em alterações nos resultados das 3 etapas da compactação png:
1) O valor filtrado dos pixels adjacentes será alterado (dependendo do filtro usado). Isso amplificará os efeitos de pequenas mudanças.
2) A alteração significa que as correspondências nessa área serão diferentes. Por exemplo, alterar 333333 para 333533 faz com que outra ocorrência de 333333 não corresponda mais, por isso seleciona outra correspondência para 333333 com uma distância diferente ou seleciona a mesma correspondência, mas com um comprimento menor e, em seguida, outra correspondência nos últimos 3 bytes. Por si só, isso mudará muito os resultados.
3) O maior problema está na etapa 3. O código huffman usa um número variável de bits, portanto, mesmo uma pequena alteração resultará em que tudo o que se segue não está mais alinhado. AFAIK A maioria dos algoritmos de compactação não pode detectar correspondências que não estejam alinhadas por bytes, de modo a impedir (ou pelo menos reduzir muito) a compactação nos dados já compactados que seguem a alteração, a menos que o compressor possa detectar correspondências que não estão alinhadas por bytes.
Os outros problemas já estão cobertos por outras respostas:
4) O Gzip usa o mesmo algoritmo Deflate com um dicionário de 32 KB, portanto, se os arquivos png forem maiores que 32 KB, as correspondências não serão detectadas, mesmo que sejam idênticas. O Bzip2 é melhor nesse aspecto, pois usa um bloco de 900 KB. O XZ usa o LZMA, cujo IIRC possui um dicionário de 4 MB no nível de compactação padrão. 5) O formato Zip não usa compactação sólida, portanto, não comprime arquivos semelhantes ou idênticos.
Talvez os compressores da família PAQ ou PPMD sejam compactados melhor, mas se você precisar compactar muitos arquivos de imagem semelhantes, poderá considerar três abordagens:
1) Armazene as imagens não compactadas (com PNG -0 ou em um formato sem compactação) e comprima com um compressor com um dicionário grande ou tamanho de bloco. (LZMA funcionará bem)
2) Outra opção seria manter os filtros, mas remover a compactação Deflate dos PNGs. Isso pode ser feito, por exemplo, com o utilitário ( AdvDef ). Em seguida, você comprime os PNGs descompactados resultantes. Após a descompactação, você pode manter o PNG não compactado ou compactá-lo novamente com AdvDef (mas isso levará tempo).
Você precisa testar as duas abordagens para ver qual comprime mais.
3) A última opção seria converter as imagens png em um vídeo, compactá-las com um compressor de vídeo sem perdas como x264 sem perdas (tomando cuidado especial com o uso do formato de cor certo) e, em seguida, extrair os quadros para imagens png individuais. Isso pode ser feito com o ffmpeg. Você também precisaria manter o mapeamento entre o número do quadro e o nome original.
Essa seria a abordagem mais complexa, mas se os pngs fizerem parte de uma animação, poderá ser a mais eficaz. No entanto, você precisará de um formato de vídeo que suporte transparência, se necessário.
Edit: Também existe o formato MNG, caso não seja usado com frequência.