내 디렉토리에 여러 이미지 파일이 있습니다. 이미지의 크기는 비슷하고 배경색도 동일합니다.
첨부된 이미지처럼 배경을 추가해서 모든 이미지를 같은 크기로 만들려면 어떻게 해야 하나요?
답변1
이는 ImageMagick이 등을 *.png
지정 하지 않고 처리할 수 있는 모든 이미지 유형에 대해 작동합니다 .*.jpg
*.jpeg
#!/bin/bash
images=$(identify -format '%f\n' * 2>/dev/null)
IFS=$'\n'
set -e
max_dims=$(
identify -format '%w %h\n' $images 2>/dev/null |
awk '($1>w){w=$1} ($2>h){h=$2} END{print w"x"h}'
)
orig_dir=originals_$(date +%Y-%m-%d_%T)
mkdir "$orig_dir"
mv -- $images "$orig_dir"
cd "$orig_dir"
set +e
for image in $images; do
convert -- "$image" -gravity Center -extent "$max_dims" "../$image"
done
결과가 이상적이지 않은 경우 원본 이미지가 오래된 디렉터리로 이동됩니다. 또한 어떤 이유로 이미지 파일 이름에 개행 문자가 포함되어 있으면 이 작업이 실패합니다.
스크립트는 문제가 발생할 때 유용한 표시를 제공하기 위해 추가 오류 메시지를 처리할 수 있습니다. 그러나 현재 이미지( set -e
및 그 사이의 모든 항목 set +e
)를 이동하는 동안 오류가 발생하면 스크립트가 종료됩니다. 이를 통해 돌이킬 수 없는 피해가 발생하지 않기를 바랍니다.
고쳐 쓰다
이제 awk
대본은 뻔뻔하게 표절되었습니다.@terdon의 답변.
답변2
선택한 대상 크기가 가장 큰 이미지보다 크면 다음을 사용해도 괜찮습니다.
mogrify -gravity Center -extent 200x200 -background white -colorspace RGB *png
위의 명령원본 파일을 변경합니다, 실행하기 전에 백업을 만들고 싶을 수도 있습니다. ImageMagick을 사용 하여 흰색 배경( )을 추가하고 이미지를 중앙에 배치( mogrify
)하여 현재 디렉토리의 모든 png 크기를 200x200 픽셀( )로 조정합니다 . 비슷한 실수를 피해야 함-extent 200x200
-background black
-gravity Center
-colorspace RGB
mogrify.im6: Ignoring incorrect gAMA value when sRGB is also present `emacs-48x48.png' @ warning/png.c/MagickPNGWarningHandler/1754.
이미지 데이터가 손실되지 않도록 하려면 사용하는 크기가 가지고 있는 가장 큰 이미지보다 크거나 같은지 확인하세요. 이 결과를 빠르게 얻으려면 다음을 시도해 보십시오.
file *png | awk -F, '{print $2}' | sort -nu
이렇게 하면 정렬된 모든 이미지의 크기가 인쇄되며 가장 큰 이미지를 쉽게 찾을 수 있습니다.
Goldilocks(:P)를 달래기 위해 전체 프로세스를 자동화할 수 있습니다.
dimensions=$(file *png | cut -d, -f 2 | sort -u |
awk '($1>w){w=$1}($3>h){h=$3}END{print w"x"h}') &&
mogrify -gravity Center -extent $dimensions -background white -colorspace RGB *png;
답변3
나는 bash 기술을 향상시킬 기회를 얻었고 다음과 같은 것을 생각해 냈습니다.
#!/bin/bash
maxx=0
maxy=0
# find largest dimension
for file in *.jpg ; do
dim=$(identify "$file" | awk '{ print $3 }')
xdim=$(echo $dim | cut -f1 -dx)
ydim=$(echo $dim | cut -f2 -dx)
if [ $xdim -gt $maxx ] ; then
maxx=$xdim
fi
if [ $ydim -gt $maxy ] ; then
maxy=$ydim
fi
done
mkdir bordered
# resize and store new images in new folder
for file in *.jpg ; do
dim=$(identify "$file" | awk '{ print $3 }')
xdim=$(echo $dim | cut -f1 -dx)
ydim=$(echo $dim | cut -f2 -dx)
xborder=$(( ($maxx - $xdim ) / 2 ))
yborder=$(( ($maxy - $ydim ) / 2 ))
convert "$file" -bordercolor black -border ${xborder}x${yborder} "bordered/$file"
done
이렇게 하면 트릭이 수행됩니다. 먼저 모든 파일을 반복하여(필요에 맞게 부분 변경) 최대 너비와 높이를 찾은 다음 다시 반복하여 원하는 테두리를 추가합니다( -bordercolor black
필요에 맞게 부분 변경). 새 파일은 "테두리" 폴더에 저장됩니다.