verifique a largura da imagem antes de convertê-la

verifique a largura da imagem antes de convertê-la

Eu uso o seguinte script para converter todas jpgas pngimagens:

# absolute path to image folder
FOLDER="/home/*/public_html/"

# max width
WIDTH=1280

# max height
HEIGHT=720

#resize png or jpg to either height or width, keeps proportions using imagemagick
find ${FOLDER}  -type f \( -iname \*.jpg -o -iname \*.png \)    -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;

mas fiquei chocado hoje quando corro

ls -l 

e encontrei todas as fotos modificadas, dados alterados, grandes ou não

 Oct 28 11:18 /home/photos/20210321/T161631305496ece25372fc18a9239da7911ac7c0dd056 (2).jpg

Então estou pensando em usar uma ifcondição para verificar primeiro o caminho da imagem, depois se WIDTH for maior que 1280px execute convert. Caso contrário, não faça nada.


atualização 2

Eu construí esse script

#!/bin/bash
for  i in /root/d/*.jpg; do
  read -r w h <<< $(identify -format "%w %h" "$i")
  if [ $w -gt  1280 ]; then
    FOLDER="$i"
    WIDTH=1280
    HEIGHT=720
    find ${FOLDER}  -type f \( -iname \*.jpg -o -iname \*.png \)    -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\> \{} \;
  fi
done

Então eu vejo findmelhor for.

fornão pesquisou todas as pastas e subpastas.


atualização 3

WIDTH=1280
HEIGHT=720
find /home/sen/tes/  -type f \( -iname \*.jpg -o -iname \*.png \)   | while read img; do \
  anytopnm "$img" | pamfile | \
   perl -ane 'exit 1 if $F[3]>1280' || convert  "$img"    -verbose -resize "${WIDTH}x${HEIGHT}>"   "$img"; \
done

está funcionando bem, mas eu entendo

jpegtopnm: WRITING PPM FILE

quando não há imagens> 1280

Responder1

O principal problema do seu convertcomando é que o argumento $WIDTHx$HEIGHT\>tenta expandir uma variável chamada $WIDTHx. Como esta variável não existe, o argumento usado with -resizeserá apenas o que $HEIGHT\>for (que é o mesmo que using "${HEIGHT}x$HEIGHT>"). Você corrige isso usando -resize "${WIDTH}x$HEIGHT>". Este é um problema em ambos os seus findcomandos.

Para reduzir suas imagens muito grandes, você poderia usar algo como

#!/bin/sh

w=1280
h=720

find /home/*/public_html -type f \( -iname '*.jpg' -o -name '*.png' \) \
    -exec convert -resize "${w}x${h}>" {} \;

Pessoalmente, eu apenas restauraria as imagens do backup mais recente, pois aumentar e diminuir as imagens dessa forma reduzirá drasticamente sua qualidade.

Ao testar as coisas, execute conjuntos menores de cópias de suas imagens antes de liberar seus scripts em toda a sua coleção de imagens. Certifique-se também de que seus backups estejam funcionando conforme o esperado.

Responder2

sinto muito, não fui claro, encontrei e construí meu roteiro final e espero corrigir o título de Q com um inteligente

pesquisa de script por arquivos jpgou pnge se encontrado, verifique Largura se for maior que 1280 será convertido

#!/bin/bash
find /home/sen/tes/  -type f \( -iname \*.jpg -o -iname \*.png \)   | while read i; do \
read -r w h <<<$(identify -format "%w %h" "$i")
if [ $w  ]; then
if [ $w -gt  1280 ]; then
FOLDER="$i"
WIDTH=1280
HEIGHT=720
find ${FOLDER}  -type f \( -iname \*.jpg -o -iname \*.png \)    -exec convert \{} -verbose -resize ${WIDTH}x${HEIGHT}\> \{} \;
fi
fi
done

informação relacionada