디렉토리에서 모든 정사각형 이미지를 찾는 방법

디렉토리에서 모든 정사각형 이미지를 찾는 방법

이미지는 JPEG 및 PNG 파일로 저장됩니다. 나는 그 안에 있는 사각형의 목록을 얻고 싶습니다.

답변1

convertImageMagick 및 Awk의 명령을 사용하여 이 작업을 수행할 수 있습니다.

convert *.png *.jp* -format '%w %h %f\n' info: | awk '$1==$2 { $1=$2=""; print substr($0, 3) }'

위 명령은 다음 내용을 포함하는 이미지 목록을 출력합니다.정확히가로 및 세로 픽셀 수는 동일합니다. 반대로, 단지 찾고 싶다면시각적으로 유사정사각형의 경우 다음과 같이 할 수 있습니다.

# Find all images in which one side is no more than 5% larger than the other.
convert *.png *.jp* -format '%w %h %f\n' info: | awk '($1>$2?$1:$2)/($1>$2?$2:$1)<=1.05 { $1=$2=""; print substr($0, 3) }'

이미지의 파일 이름에 개행 문자가 포함되어 있으면 두 명령 모두 제대로 작동하지 않습니다.

답변2

exiftool현재 디렉토리( )에서 다음을 사용하십시오 ..

exiftool -q -if '$ImageHeight == $ImageWidth' -p '$Filename' -ext jpg .

이를 수행하는 또 다른 방법 imagemagick(fx특수 연산자):

for f in ./*.[jJ][pP][gG]
  do
    (( $(identify -format '%[fx:(h == w)]' "$f") )) && printf '%s\n' "$f"
  done

표현식은 if 및 if so를 '%[fx:(h == w)]'반환 하고, 차례로 의 반환 값은 각각 및 입니다 .1true0false(( ))truefalse


두 솔루션 모두 입력 파일에 jpg또는 JPG확장자가 있다고 가정합니다. 귀하의 필요에 맞게 조정하십시오...
또한, 참조하세요엔윅다음 파일을 검색하는 경우 아래 댓글을 확인하세요.바라보다대략 정사각형 모양입니다.

답변3

다음 솔루션은 @loa_in_의 의견에 나온 아이디어를 기반으로 합니다. 이 작업의 경우 를 사용하는 file것보다 훨씬 빠릅니다 convert. 또한 "이상한" 파일 이름도 올바르게 처리합니다.

file -F '' -0 *.png \
| sed -e 's/^\(.*\)\x00.*PNG.*, \([0-9]\+\) x \([0-9]\+\).*$/\2 \3 \1/;s/^\(.*\)\x00.*JPEG.*, \([0-9]\+\)x\([0-9]\+\).*$/\2 \3 \1/' \
| awk '$1==$2 { $1=$2=""; print substr($0, 3) }'

fileJPEG 및 PNG 파일 출력의 해상도 부분이 다르게 보이므로 별도로 구문 분석합니다.

답변4

모든 하위 디렉터리에 정사각형 png 이미지를 포함하도록 @nwk의 향상된 버전:

find . -name \*.png -print0 | xargs -0 -I{} convert {} -format '%w %h %f\n' info: | awk '$1==$2 { $1=$2=""; print substr($0, 3) }'

관련 정보