내 서버에는 다양한 하위 폴더의 이미지로 가득 찬 12GB의 거대한 갤러리가 있습니다. 이 파일은 너무 커서 전체 해상도로 사용할 수 없습니다. 모든 이미지의 크기를 너비 820픽셀로 조정해야 합니다(비율 유지). 그래서 내 질문은 - 820px보다 큰 모든 이미지의 크기를 조정하고 원본 파일을 덮어쓰며 다시 저장하는 일종의 크롤링 스크립트를 어떻게 만들 수 있습니까?
당신이 나를 도울 수 있기를 바랍니다 :-) 미리 감사드립니다.
답변1
ImageMagick 도구가 작업을 수행 convert
할 수 있습니다 .mogrify
패키지 관리자나 소스/rpm을 통해 얻을 수 있습니다.여기.
기본 사용법(원본 파일을 덮어씁니다):
$ mogrify -resize 820x ./*.jpg
재귀가 필요한 경우:
find . -name '*.jpg' -execdir mogrify -resize 820x {} +
답변2
이 스크립트는 .png
폴더의 모든 파일 크기를 30%로 조정합니다. 원본 파일을 삭제하거나(인 경우 delete_original
) true
보관할 수 있습니다. 이 경우 크기가 조정된 파일에는 이름 접미사가 붙습니다 rename_postfix
.
#!/bin/bash
rename_postfix="-small"
delete_original=true
substr=".png"
for str in *.png; do
#reverse strings
reverse_str=$(echo $str | rev)
reverse_substr=$(echo $substr | rev)
#find index of reversed substring in reversed string
prefix=${reverse_str%%$reverse_substr*}
reverse_index=${#prefix}
#calculate last index
index=$(( ${#str} - ${#substr} - $reverse_index ))
# Extract the filename without extension
filename="${str:0:index}"
if $delete_original; then
# the name can remain, because the original will be removed
new_filename="${str}"
else
# need a new name, two files will remain
new_filename="${filename}${rename_postfix}${substr}"
fi
echo "extension = ${substr}, original = ${str}, filename = ${filename}, new = ${new_filename}"
# Resize and convert the file to .jpg
convert -resize 30% "${str}" "${new_filename}"
done
나는 위의 본문을 사용하여 디렉토리 매개변수 등을 허용하는 함수를 작성할 수 있어야 한다고 생각합니다(하위 폴더로 이동하려는 경우).
이 함수는 라이브러리 convert
에서 제공됩니다 .imagemagick
sudo apt install imagemagick