
Eu tenho um monte de imagens em uma pasta:
images/image1.jpg
images/image2.jpg
...
Essas imagens não são otimizadas para a web.
Gostaria de saber se existe um comando Linux para otimizar em massa essas imagens em apenas uma etapa?
ATUALIZAR: preciso fazer duas coisas para cada imagem:
se a largura da imagem for superior a 900px, reduza a largura para 900px (mantendo as proporções)
salve o arquivo com qualidade inferior, digamos 70% do original.
Responder1
InstalarImagemMagick:
sudo apt-get install imagemagick
E use o convert
comando da seguinte forma:
mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done
Responder2
Se você tiver muitos arquivos e quiser fazer isso rapidamente, também poderá usar o programa paralelo:
sudo apt install imagemagick parallel
E então o seguinte:
find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
-set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'
Vamos examinar isso:
find
-- procure por arquivos.
-- no diretório atual\( -name '*.jp*g' -o -name '*.png' \)
- que são png ou jpeg (ambos "jpg" e "jpeg" são extensões comuns!)-a ! -name '*.min.*'
-- e pular arquivos que já estão minimizados-type f
-- e são arquivos reais, não links simbólicos ou diretórios com nomes estranhos-print0
-- imprime esses arquivos separados pelo byte nulo (para que os espaços não quebrem as coisas)
parallel
-- leia o comando anterior e execute este comando em paralelo para cada elemento-0
-- cada elemento é separado pelo byte nuloconvert {}
-- chame o programa imagemagick "convert" com o nome do arquivo substituído por{}
resize '>900x' -quality '70%'
-- redimensione a imagem para um máximo de 900px no eixo x e altere a qualidade jpeg para 70%.Hámuitosoutras opções possíveis aqui.-set filename:newname "%d/%[basename].min.%[extension]"
-- crie uma variável com o novo nome de arquivo.Veja a documentação para todos os valores válidos.%d
-- o diretório onde o arquivo está%[basename]
-- o nome do arquivo sem extensões%[extension]
-- a extensão original do arquivo
"%[filename:newname]"
-- o nome do arquivo de saída que configuramos na etapa anterior