한 단계로 여러 이미지 파일을 대량 최적화하는 Linux 명령이 있습니까?

한 단계로 여러 이미지 파일을 대량 최적화하는 Linux 명령이 있습니까?

폴더에 여러 개의 이미지가 있습니다.

images/image1.jpg
images/image2.jpg
...

해당 이미지는 웹에 최적화되어 있지 않습니다.

단 한 단계로 해당 이미지를 대량으로 최적화할 수 있는 Linux 명령이 있는지 궁금합니다.

업데이트: 각 이미지에 대해 두 가지 작업을 수행해야 합니다.

  1. 이미지의 너비가 900px보다 높으면 너비를 900px로 줄입니다(비율 유지).

  2. 원본의 70% 정도 낮은 품질로 파일을 저장해 보세요.

답변1

설치하다이미지매직:

sudo apt-get install imagemagick

그리고 convert다음과 같이 명령을 사용하십시오.

mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done

답변2

파일이 너무 많고 이 작업을 빠르게 완료하려면 병렬 프로그램을 사용할 수도 있습니다.

sudo apt install imagemagick parallel

그리고 다음은 다음과 같습니다.

find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
    -set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'

이를 살펴보겠습니다.

  • find-- 파일을 찾아보세요
    • .-- 현재 디렉토리에
    • \( -name '*.jp*g' -o -name '*.png' \)-- png 또는 jpeg입니다("jpg"와 "jpeg"는 모두 일반적인 확장자입니다!).
    • -a ! -name '*.min.*'-- 이미 최소화된 파일은 건너뜁니다.
    • -type f-- 심볼릭 링크나 이상한 이름의 디렉토리가 아닌 실제 파일입니다.
    • -print0-- 이 파일을 널 바이트로 구분하여 인쇄합니다(공백으로 인해 문제가 발생하지 않도록).
  • parallel-- 이전 명령을 읽고 각 요소에 대해 이 명령을 병렬로 실행합니다.
    • -0-- 각 요소는 널 바이트로 구분됩니다.
    • convert {}-- 파일 이름을 대체하여 imagemagick "convert" 프로그램을 호출합니다.{}

관련 정보