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

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

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. 이 변수가 존재하지 않으므로 with 사용된 인수는 -resize무엇이든 됩니다 $HEIGHT\>( using 과 동일 "${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

관련 정보