변환하기 전에 이미지 너비를 확인하세요

변환하기 전에 이미지 너비를 확인하세요

jpg모든 이미지를 변환하려면 다음 스크립트를 사용합니다 png.

# 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\> \{} \;

그런데 오늘 달려가서 깜짝 놀랐어요

ls -l 

크든 작든 사진은 모두 수정됐고, 데이터도 변경된 것으로 드러났다.

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

if그래서 먼저 이미지 경로를 확인한 다음 WIDTH가 1280px보다 큰 경우 실행되는 조건을 사용할 생각입니다 convert. 그렇지 않으면 아무것도 하지 마십시오.


업데이트 2

이 스크립트를 만들었습니다.

#!/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

그래서 나는 그것을 find더 명확 하게 본다 for.

for모든 폴더와 하위 폴더는 검색되지 않습니다.


업데이트 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

훌륭하게 작동하지만 이해합니다.

jpegtopnm: WRITING PPM FILE

이미지가 없을 때> 1280

답변1

명령의 주요 문제점 convert은 매개변수가 $WIDTHx$HEIGHT\>이름이 지정된 변수로 확장하려고 한다는 것입니다 $WIDTHx. 이 변수가 존재하지 않으므로 사용되는 매개변수 -resize는 임의의 매개변수입니다 $HEIGHT\>( 사용과 동일 "${HEIGHT}x$HEIGHT>"). 를 사용하여 이 문제를 해결할 수 있습니다 -resize "${WIDTH}x$HEIGHT>". 이것은 두 명령의 문제입니다 find.

너무 큰 이미지를 축소하려면 다음과 같은 것을 사용할 수 있습니다.

#!/bin/sh

w=1280
h=720

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

개인적으로 저는 가장 최근 백업에서만 이미지를 복원합니다. 이렇게 이미지를 확대하거나 축소하면 품질이 크게 저하될 수 있기 때문입니다.

테스트할 때 먼저 작은 이미지 복사본에서 스크립트를 실행한 다음 전체 이미지 컬렉션에서 스크립트를 실행하세요. 또한 백업이 예상대로 작동하는지 확인하십시오.

답변2

죄송합니다. 명확하지 않았습니다. 최종 스크립트를 찾아서 작성했으며 Q의 제목을 영리하게 수정하고 싶습니다.

스크립트는 파일을 검색 jpg하거나, png발견되면 너비가 1280보다 큰지 확인하여 변환합니다.

#!/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

관련 정보