순차 기능에서 이미지 크기를 조정하는 방법은 무엇입니까?

순차 기능에서 이미지 크기를 조정하는 방법은 무엇입니까?

노력하고있어:

  • 내 이미지 형식을 변경하고,
  • 그런 다음 높이와 너비를 40%로 조정합니다.
  • 그런 다음 품질은 소스의 최대 35%로 최적화되고, 이미지의 전체 크기는 소스의 최대 35%로 최적화됩니다.

이것은 내 코드입니다.

find . -name '*.png' -exec mogrify -format jpg {} + &&
find . -name '*.{jpeg,jpg}' -exec convert -resize 40% _resized.jpg {} + &&
find ./*.{jpeg,jpg} -exec jpegoptim   -m 35%  --size=35% {} \;

크기 조정 - 2번째 줄 - 실패한 것 같습니다. 이미지 속성을 보면 동일한 이미지 크기를 얻습니다.

새 이미지의 크기를 조정하고 싶습니다. - 원래 이름 + 이름 끝에 "Resize"라는 단어가 있어야 합니다.

답변1

두 번째 명령의 주요 문제점은 find중괄호 확장을 이해하지 못하여 {jpeg,jpg}이를 리터럴 문자열로 처리한다는 것입니다. 두 번째 문제는 {} +매개변수 형식을 사용하여 여러 파일을 convert.

참고: echo아래 명령이 올바른 작업을 수행한다고 만족하는 경우에만 삭제하십시오.

아마도 당신이 원하는 것은 다음과 같습니다.

find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
  for f; do 
    ext="${f##*.}"; echo convert -resize 40% "$f" "${f%.*}_resized.$ext"
  done
' find-sh {} +

\(... 바인딩 비율이 더 강하기 때문에 괄호가 \)필요합니다 . 해당 파일이 없으면 일치하는 파일을 찾을 수 있지만 변환되지는 않습니다.-exec-o-name '*.jpeg'

출력 파일 이름이 그다지 까다롭지 않다면 위의 내용을 다음과 같이 단순화할 수 있습니다.

find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
  for f; do 
    echo convert -resize 40% "$f" "${f%.*}_resized.jpg"
  done
' find-sh {} +

.jpg(원본 파일의 확장자가 있어도 출력 파일은 확장자로 생성됩니다 .jpeg.)

find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
  for f; do 
    echo convert -resize 40% "$f" "${f}_resized.jpg"
  done
' find-sh {} +

(이렇게 하면 유사한 출력 파일이 생성됩니다 foo.jpeg_resized.jpg).

효율성에도 관심이 없다면 찾은 각 파일에 대해 셸 호출을 수행하고 셸 루프를 취소할 수 있습니다.

find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec sh -c '
  echo convert -resize 40% "$1" "${1}_resized.jpg"
' find-sh {} \;

세 번째 명령에서 참고하세요.

find ./*.{jpeg,jpg} -exec jpegoptim   -m 35%  --size=35% {} \;

당신의껍데기인용되지 않은 를 확장하는 것이 가능 {jpeg,jpg}하지만 그것은 당신이 원하는 것이 아닙니다. 다시 말하지만, 이것은 다음과 같아야 합니다.

find . \( -name '*.jpeg' -o -name '*.jpg' \) -exec jpegoptim -m 35%  --size=35% {} \;

답변2

제가 올바르게 이해했다면 도움이 되었는지 알려주시기 바랍니다.

find . -name "*.jpeg" -o -name "*.jpg" -exec bash -c 'convert -resize 40% "{}" "{}"_resized.jpg' \;

관련 정보