리눅스2023. 5. 3. 10:56

 

반달가면 이글루에서 백업 - http://bahndal.egloos.com/573664

 

imagemagick 패키지를 설치하면 리눅스에서 그림 파일 형식을 변환하거나 크기조정(resize)을 간단하게 수행할 수 있다. 이미지 편집 프로그램인 GIMP를 사용해도 되지만, 여러개의 파일에 대해 반복 작업을 해야 하는 경우엔 터미널창에서 명령어로 작업하는 것이 훨씬 빠르다.

우선 imagemagick 패키지를 설치하자. 터미널창에서 아래와 같이 입력. (데비안/우분투 기준이다.)

# S/W 저장소 갱신
sudo apt-get update
# imagemagick 설치
sudo apt-get install imagemagick

이제 convert 명령으로 그림 파일을 변환할 수 있다. 형식은 아래와 같다.

convert [입력 옵션] 입력파일 [출력 옵션] 출력파일

예를 들어 test.png 파일을 test.jpg 파일로 변환하고 싶다면 터미널창에서 아래와 같이 입력하면 된다.

convert test.png test.jpg

jpg 파일의 화질(quality)을 지정하려면 -quality 옵션을, 크기를 조정하려면 -resize 옵션을 추가해 준다. -quality 옵션의 화질 수준은 1(저화질)에서 100(고화질) 사이의 값으로 지정해 준다.

# test.png -> test.jpg 변환, 화질 95, 크기 800*600
convert test.png -quality 95 -resize 800x600 test.jpg

-resize 옵션을 사용할 때, 가로 세로 비율을 유지하면서 가로 또는 세로 하나의 값만 지정할 수도 있다. 아래의 예시를 보자.

# test.png -> test_resized.png, 가로 크기 500 픽셀
convert test.png -resize 500 test_resized.png

# test.png -> test_resized.png, 세로 크기 500 픽셀
convert test.png -resize x500 test_resized.png

컬러 이미지를 흑백으로 바꿀 수도 있다. 입력 옵션에서 컬러스페이스(colorspace)를 변경해 준다.

# test.png -> test_gray.jpg, 흑백(grayscale) 변환, 화질 95
convert -colorspace gray test.png -quality 95 test_gray.jpg

위와 같이 하면 결과 이미지가 상당히 어둡게 나오는데, 원래의 밝기를 유지하기 위해 -gamma 옵션을 추가하자.

# test.png -> test_gray.jpg, 흑백(grayscale) 변환, 화질 95, 밝기 조정
convert -colorspace gray -gamma 2.2 test.png -quality 95 test_gray.jpg

여러 페이지로 구성된 pdf 파일도 convert를 이용해서 그림 파일로 변환할 수 있다. 이전 게시물을 참고하자. 여기로

그 외에도 엄청나게 많은 기능들이 있는 것 같다. 자세한 내용은 man 페이지를 참고해야 할 듯.

man convert

for 반복문과 조합하면 여러개의 이미지를 한꺼번에 변환할 수 있다. ~/pictures 디렉토리에 있는 모든 png 파일을 가로가 800 픽셀인 jpg 파일로 변환하는 경우를 생각해 보자. 아래와 같이 간단한 스크립트를 만들면 된다.

# ~/pictures 디렉토리로 이동
cd ~/pictures
# for 반복문
for file in `ls | grep "\.png$"`
do
  # 확장자(png)를 jpg로 바꾼 형태를 결과파일명 변수 result_file에 할당
  result_file=`echo "$file" | sed 's/\.png$/\.jpg/'`
  # 이미지 변환  (png -> jpg)
  convert $file -quality 95 -resize 800 $result_file
done

ls 명령의 결과에서 .png로 끝나는 것만 grep 명령으로 추려낸 것을 for 반복문에 적용해서 변수 file에 할당한다. 결과 파일명은 sed 명령을 이용해서 입력 파일명의 확장자만 변경한 형태로 만들어서 변수 result_file에 할당했다. (sed 명령을 이용한 문자열 대체는 이전 게시물을 참고하자. 여기로)

 

 

728x90
Posted by 반달가면