10,000개의 JPEG가 포함된 디렉토리가 있습니다. 파일을 생성할 때 실수를 했고 이제 일부는 720px × 480px인데 모두 448px × 336px이어야 합니다. 디렉터리에 너무 큰 파일이 포함되어 있으며 올바른 크기는 448px × 336px입니다. 크기가 동일해야 하므로 720px × 480px 이미지를 올바른 448px × 336px로 축소해야 합니다.
- 각 파일은 448px × 336px이어야 합니다.
- 파일이 10,000개이므로 각 파일을 검사하여 어떤 파일이 너무 큰지 판단하기가 어렵습니다.
ImageMagick 또는 유사한 일괄 처리 도구를 사용하여 크기가 잘못된 이미지만 선택적으로 크기를 조정할 수 있는 방법이 있습니까?
답변1
다음을 사용하여 너비가 720픽셀인 파일을 찾을 수 있습니다.
identify -format '%w %i\n' *.jpg | awk '/^720/ {print $2}'
*.jpg 확장을 유발하여 "인수 목록이 너무 김" 오류를 발생시킬 수 있는 파일이 실제로 많은 경우 다음 변형을 사용할 수 있습니다.
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}'
이 목록을 사용하면 다음과 같은 파일의 크기를 조정할 수 있습니다.
find -name '*.jpg' -exec identify -format '%w %i\n' {} + | awk '/^720/ {print $2}' | xargs -I {} convert -resize 488x336! {} {}
느낌표! 488x336이 없으면 새 이미지가 해당 크기에 정확히 맞춰지므로 가로 세로 비율이 유지되고 지정된 크기는 너비와 높이의 최대 크기입니다.
답변2
희망할 수 있다
convert in.jpg -resize "448x336!" out.jpg
이미 크기가 맞다면 파일이 터치되지 않을까요?
불행히도 그렇지 않습니다. 하지만 imagemagic 명령줄 형식이 작동하는 방식을 고려하면 이는 놀라운 일이 아닙니다.
따라서 각 파일의 이미지 크기를 먼저 확인해야 합니다. 이제 identify
이 목적을 위한 명령이 있는 ImageMagic을 사용하려고 합니다 .
identify -format "%wx%h\n" file.jpg
형식으로 크기를 표시하십시오 WxH
(예: ) 448x336
.
크기가 가 아니면 448x336
크기를 조정하고 싶습니다. 이 경우 convert
크기 조정을 사용합니다. 이미지를 강제로 새 크기로 만들기 위해 종횡비를 변경하는 경우에도 크기를 조정하고 싶다고 448x336
알려야 합니다 . 크기에 옵션/플래그로 추가하여 이를 수행합니다. :convert
!
convert in.jpg -resize "448x336!" out.jpg
필요한 크기를 조정하십시오. 그러나 출력에 대한 고정된 파일 이름이 없습니다. 원래 이름을 가져와 -res
앞에 삽입해 보겠습니다 . .jpg
예를 들면 다음과 같습니다 .in-res.jpg
convert in.jpg -resize "448x336!" -set filename:path "%d/%t-res.%e" "%[filename:path]"
find
' 명령을 사용하여 디렉토리를 탐색합니다 ..jpg' 이미지 - 또는 ".JPG". 섹션은 명령을 identify
사용하기 위해 셸에서 실행됩니다 . 또한 첫 번째 작업(옵션 아님)이 성공 하면 실행되는 명령 으로 셸을 사용합니다 . 이 경우 크기를 조정하면 다음과 같이 메시지가 표시됩니다. 크기가 조정된 각 파일에 대해.test
[ ... ]
convert
-exec
find . -type f -iname "*.jpg" -exec bash -c \
'[ $(identify -format "%wx%h\n" "{}") != 448x336 ]' \; -exec bash -c \
'convert "{}" -resize "448x336!" -set filename:path "%d/%t-res.%e" \
"%[filename:path]" ; echo "Resized {}"' \;
bash
두 번째 작업 대신 일반을 사용 -exec convert ...
하고 새 작업(예: -print
또는 -ls
)을 추가하여 크기가 조정된 파일의 이름을 표시할 수 있습니다.
기술적으로 명령은 한 줄입니다(스크롤을 피하기 위해 연속된 줄을 표시함).
그리고, 이 설명을 듣고 난 후에도 이 문장이 읽기 쉽지 않다는 느낌이 아직도 듭니다...