Imagemagick을 사용하여 스크립트에서 이미지 크기 조정

Imagemagick을 사용하여 스크립트에서 이미지 크기 조정

이미지 크기를 800px로 조정하고 비율을 유지하는 bash 스크립트를 만들고 싶습니다.

내 코드는 bash에서는 작동하지 않지만 identify단일 이미지에서는 작동합니다.

#!/bin/bash
for file in ./**/public/uploads/*.*; do
  width = $(identify -format "%w" ${file})
  if [ width > 800 ]
  then
    echo $file // resize image
  fi
done
exit 0;

질문: 저는 Permission denied3호선을 이용합니다.

아래 답변 중 하나에 제공된 솔루션을 시도했습니다.

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [ "$width" -gt 800 ]
  then
    echo "$file"
  fi
done
exit 0;

이제 다음 오류 메시지가 나타납니다.

identify.im6: Image corrupted   ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952.
./images.sh: line 6: width: command not   found
./images.sh: line 7: [integer expression expected

답변1

귀하의 스크립트에는 두 가지 명백한 문제가 있습니다. 첫째, 기본적으로 활성화되지 않은 옵션 **으로 제공 됩니다. globstar대화형 셸에서 이를 활성화했을 수도 있지만 스크립트에 대해서도 이 작업을 수행해야 합니다.

그러면 실제로 비교하는 것이 아니라 $widthstrings 을 비교하는 것입니다 width. $필요 [ ].

마지막 문제는 실행 중인 파일 중 일부가 손상되었거나 이미지가 아니라는 것입니다. 어쨌든 identify명령이 실패하므로 $width비어 있습니다. 간단한 해결책은 $widthnull( -z "$width")을 테스트하고 null( ! -z "$width")만 비교하는 것입니다.

이 시도:

#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do 
  width=$(identify -format "%w" "${file}")
  if [[ ! -z "$width" && "$width" -gt 800 ]]
  then
    echo "$file"
  fi
done
exit 0;

답변2

문제(또는 문제 중 적어도 하나)는 귀하가 말한 내용입니다.

width = $(identify -format "%w" "${file}")

다음과 같이 앞뒤 공백을 제거해야 합니다 =.

width=$(identify -format "%w" "${file}")

관련 정보