Como obter pngcrush para substituir arquivos originais?

15

Eu li man pngcrushe parece que não há como esmagar um arquivo PNG e salvá-lo sobre o original. Quero compactar várias pastas no valor de PNGs, portanto, seria útil fazer tudo isso com um único comando!

Atualmente, estou pngcrush -q -d tmp *.pngcolando manualmente os arquivos do tmpdiretório para a pasta original. Então eu acho que usar mvpode ser o melhor caminho a percorrer? Alguma ideia melhor?

DisgruntledGoat
fonte

Respostas:

17

Tudo em uma linha:

for file in *.png; do pngcrush "$file" "${file%.png}-crushed.png" && mv "${file%.png}-crushed.png" "$file"; done

deve fazê-lo.

(Embora até agora em meus próprios testes, menos da metade dos pngs em que eu testei pngcrusheram menores depois, me deixe impressionado.)

frabjous
fonte
Obrigado! A quantidade que você pode compactar os PNGs pode depender de como eles foram criados. Eu acredito de Photoshop "Salvar para Web" tem alguma forma de PNG triturador construído dentro.
DisgruntledGoat
A maioria dos meus foi criada com o comando de importação do ImageMagick. Evito software comercial como o Photoshop sempre que possível.
Frabjous
4
use -brute para uma melhor compactação.
Collin Anderson
1
A outra resposta agora é melhor com pngcrush mais recente.
19715 Hugo
22

Desde a versão 1.7.22, pngcrushtem uma opção de substituição.

Experimentar

pngcrush -ow file.png

Consulte Changelog para obter mais informações:

Version 1.7.22  (built with libpng-1.5.6 and zlib-1.2.5)
  Added "-ow" (overwrite) option.  The input file is overwritten and the
    output file is just used temporarily and removed after it is copied
    over the input file..  If you do not specify an output file, "pngout.png"
    is used as the temporary file. Caution: the temporary file must be on
    the same filesystem as the input file.  Contributed by a group of students
    of the University of Paris who were taking the "Understanding of Programs"
    course and wished to gain familiarity with an open-source program.
Jan
fonte