Imagemagick로 이미지 크기 줄이기

Posted at 2009/01/16 21:23// Posted in 도구
웹에 사진을 올리는데 직원들이 직접 올리는게 많단 말이지요. 문제는 그 직원들 대부분이 컴맹이란 거고요. 웹사이트가 갈 수록 무거워진다 싶어서 보니 무려 가로픽셀이 3000이 넘는 사진들이 올라가 있는 걸 보고 기겁을 했지요. 마우스로 크기 줄인다고 실제 파일이 줄어드는 게 아니란 걸 이해시키고 크기를 줄여 올리게 하느니 서버에서 줄여버리자고 마음먹은 게 한두달쯤 전인데 그때는 도저히 가로폭을 기준으로 줄이는 방법을 못찾아서 파일크기를 기준으로 줄이도록 했습니다.

find /경로/* -name '*.jpg' -size +300k -exec convert '{}' -resize 510 -quality 80 '{}' \; -print

다행히 윈도우 좀 깔아봤구나 하는 수준의 직원으로부터 적절한 크기가 510px이란 말을 듣고, 이렇게 300KB가 넘으면 가로폭을 510px로 줄이도록 설정했는데 문제인게 510px로 줄여도 파일크기가 300KB가 넘는 파일을 물면 무한루프에 빠지더라는 거지요. 그래서 수동으로 작업을 돌리는 뻘짓을 하다가 드디어 해결했습니다.

#!/bin/sh
find /경로/* -name '*.jpg' -mtime -1 -exec identify -format "%d %f %w" {} \; > imglist

awk -f awk.resize imglist > ovrlist.sh

크론으로 돌릴 생각으로 만들어서 24시간 동안 올라온 이미지 파일을 찾아다가 디렉토리, 파일명, 이미지 가로폭을 아래처럼 imglist에 기록하도록 했지요.

/경로 img-20090115181413.jpg 480
/경로 img-20090116125219.jpg 510
/경로 img-20090116125251.jpg 510
/경로 img-20090116160749.jpg 255
/경로 img-20090116160816.jpg 255
/경로 img-20090116173933.jpg 510
/경로 img-20090116174745.jpg 645

쉘이란 걸 도통 어찌 짜야하는 건지 몰라서 마구잡이로 찾다가 awk란 걸 알게되었어요.

#!/bin/awk
{if($3>510)
     print "convert /경로/" $2 " ""-resize 510 -quality 80 /경로/" $2
}

이 대담무식한 것은 어쩔수 없어요. 어쨌건 원하는 결과는 나왔으니까요. 하지만 이대로는 그냥 문자열.

convert /경로/img-20090116174745.jpg -resize 510 -quality 80 /경로/img-20090116174745.jpg

이렇게 awk.resize를 실행한 결과를 따로 ovrlist.sh로 만들어서 실행을 시켜야한다는 게 조잡함에 극치랄까요. 사실 이 부분은 합칠 수 있을 거 같아서 찾아보려다가 파일을 확인하고 조정하고자 내버려 두기로 했지요. 귀찮기도 하고.

이걸 구현하려고 일주일을 고민하다가 파일크기로 줄이는 거에 만족했는데 하도 할 게 없어서 이거라도 다시해볼까하고 뒤적거리고 질문 올리고 했더니 두시간도 안돼서 해결이 되더군요. 지식이 된장인가 봅니다. 숙성을해야 쓸만해지는군요.
2009/01/16 21:23 2009/01/16 21:23

http://blogand.net/trackback/2689929