Redimensiona apenas imagens grandes para pequenas sem alterar a relação altura / largura

1

Eu tenho uma pasta de imagens coloridas em PNG e JPEG. Usando file no linux, posso ver imagens PNG todas PNG image data, ... x ..., 8-bit/color RGBA, non-interlaced onde sua altura e largura são diferentes. E as imagens JPEG são todas JPEG image data, JFIF standard 1.01 . Seu tamanho pode ser de até 500KB .

Eu posso usar find . -type f -size +10k -exec ls -l {} \; para listar todas as imagens cujo tamanho está acima de 10Kb .

Também posso usar convert input.png -geometry x150 output.png para redimensionar a altura de uma imagem para 150px sem alterar a proporção altura / largura. ou mogrify -geometry x150 * para redimensionar todas as imagens na pasta.

Alguém sabe como combinar esses dois comandos e redimensionar todas as imagens cujo tamanho está acima de 10Kb na pasta?

    
por SoftTimur 17.04.2018 / 08:13

3 respostas

1

Eu suponho que existem apenas arquivos de imagem no diretório atual. Caso contrário, você pode especificar dois comandos, um com -name "*.jpg" e outro com -name "*.png" .

Tente este comando para ver quais arquivos estão selecionados (evite destruir os arquivos que deseja manter),

find . -type f -name "*" -size +10k -exec echo mogrify -geometry x150 {} \;

e se estiver OK, remova echo para usar este comando para diminuir os arquivos que são muito grandes

find . -type f -name "*" -size +10k -exec mogrify -geometry x150 {} \;

Talvez o tamanho de 10k não corresponda a -geometry x150 , por isso você deve modificá-lo dependendo do tipo de foto.

    
por sudodus 17.04.2018 / 08:43
2

Por que não executar o convert de find?

find . -type f -size +10k -exec convert {} -geometry x150 {}.png \;

Você precisa rename dos arquivos de *.pic.png para algo útil. Mas deve funcionar.

    
por Simon Sudler 17.04.2018 / 08:41
1

Isso criará uma pasta com suas imagens redimensionadas e não tocará em seus arquivos originais e colocará as imagens redimensionadas lá.

Isso reservará as imagens originais das quais você pode substituir se estiver satisfeito com as novas imagens redimensionadas.

#!/bin/bash

[ ! -d resized ] && mkdir resized

while read image; do
    echo "Resizing [$image] to [resized/$image]"
    convert $image -geometry x150 "resized/$image"
done < <(find . -type f -size +10k -exec ls {} \;)
    
por L. D. James 17.04.2018 / 08:47