![Como converter 32 MB de arquivo PNG em 200 KB sem perder as cores](https://rvso.com/image/1070945/Como%20converter%2032%20MB%20de%20arquivo%20PNG%20em%20200%20KB%20sem%20perder%20as%20cores.png)
Tenho algumas imagens com 32 MB de tamanho e quero alterar seu tamanho de 32 MB para 100 KB ou qualquer KB de tamanho sem afetar suas cores.
Os comandos que estou tentando são:
muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +
muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete
muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +
Aqui, primeiro eu converto um PNG para JPG que reduz seu tamanho de 32Mbs para 5,8Mbs e tudo permanece igual, mas quando uso o terceiro comando, ele remove a cor de fundo da imagem e torna a escala de cinza meio borrada.
No entanto, o texto ainda é legível, mas as cores e o logotipo de fundo não.
Como posso conseguir isso com convert, mogrify ou qualquer outra ferramenta? Eu tentei todas as coisas possíveis até agora.
Responder1
É por causa de como funciona a compactação JPEG. Ele tenta arredondar pixels adjacentes que são semelhantes entre si para valores semelhantes. Isso causa perda de detalhes e bloqueios.
Isso se torna mais perceptível à medida que você aumenta o nível de compactação, que éexatamenteo que você está fazendo. Além disso, você está fazendo isso em duas etapas:
- Compressão sem perdas (PNG) para com perdas (JPEG).
- Compressão com perdas para perdas.
Você iráprovavelmenteobtenha um resultado melhor passando de sem perdas para com perdas na qualidade final, aplicando assim a compactação com perdas apenas uma vez, por exemplo, usando jpeg:extent=300kb -strip -quality 90 -scale 90%
na primeira conversão.
Além disso, você não diz nada sobre o tamanho da imagem e o nível de detalhe. Pode não ser viável reduzi-lo para 300kB e manter a qualidade desejada.
Para se livrar das manchas de fundo, você pode tentar aplicar limites ao seu documento em algum software de edição de imagens, forçando qualquer coisa menos que um certo tom de cinza a ficar branco, por exemplo.
No entanto, não importa o que você faça, compactar de um formato sem perdas de 30 MB para um formato com perdas de 300 KBvailevar a uma qualidade visivelmente reduzida.
Responder2
Estou tentando
find . -iname '*.png' -exec convert -resize 60% -quality 60 "*.jpg" {} +
mas isso não funciona.
Ref.https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux
$ ls -1 *.png | xargs -n 1 bash -c 'convert -quality 60 "$0" "${0%.*}.jpg"'
Converte meu exemplo 31MB.png em 1.4MB.jpg . ... Você pode ter que repetir com, por exemplo, $ ls -1 *.PNG | ...
etc.
Ref. comentário de @steeldriver: "um pouco melhor é xargs -d '\n' -n 1
"