Golang 이미지 처리 패키지 Imaging 라이브러리 알아보기

오늘은 Golang으로 이미지 처리를 할 수 있는 방식을 모아둔 Imaging 라이브러리를 알아보려 합니다.

Imaging 설치

우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.

맥에서 brew로 쉽게 설치할 수 있습니다.

brew install go

우분투에서도 apt로 쉽게 설치할 수 있습니다.

sudo apt-get install golang-go

맥에서 Golang의 버전을 올리려면 brew를 이용합니다.

brew upgrade go

우분투에서도 Golang의 버전을 올리려면 backports 저장소를 등록하고 apt를 이용합니다.

sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt-get update
sudo apt-get install golang-go

go get으로 Imaging 패키지를 설치합니다.

go get -u github.com/disintegration/imaging

홈의 go 폴더에 Imaging 소스코드와 패키지 파일이 생성됩니다.

예제

package main

해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.

import (
	"github.com/disintegration/imaging"
)

imaging을 가져옵니다.

func main() {
	src, err := imaging.Open("original.png")
	if err != nil {
		panic(err)
	}

이미지 소스를 가져옵니다.

	src = imaging.CropAnchor(src, 300, 300, imaging.Center)

사각형의 이미지 크기를 만들기 위해 특정 부분을 중심으로 잘라줍니다.

위 코드와 같은 경우에는 imaging.Center로 설정했습니다.

	blur := imaging.Blur(src, 5)
	err = imaging.Save(blur, "blur.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 가우시안 함수로 블러 처리를 합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	sharpen := imaging.Sharpen(src, 1.5)
	err = imaging.Save(sharpen, "sharpen.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 선명하게 합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	adjustGamma := imaging.AdjustGamma(src, 1.25)
	err = imaging.Save(adjustGamma, "adjustGamma.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 감마 보정을 합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	adjustContrast := imaging.AdjustContrast(src, 20)
	err = imaging.Save(adjustContrast, "adjustContrast.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 대비를 보정합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	adjustBrightness := imaging.AdjustBrightness(src, 20)
	err = imaging.Save(adjustBrightness, "adjustBrightness.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 밝기를 보정합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	adjustSaturation := imaging.AdjustSaturation(src, -30)
	err = imaging.Save(adjustSaturation, "adjustSaturation.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 채도를 보정합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	grayscale := imaging.Grayscale(src)
	err = imaging.Save(grayscale, "grayscale.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 그레이 스케일을 생성합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	invert := imaging.Invert(src)
	err = imaging.Save(invert, "invert.jpg")
	if err != nil {
		panic(err)
	}

준비된 이미지 소스에 반전 효과를 줍니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

	convolve3x3 := imaging.Convolve3x3(
		src,
		[9]float64{
			-1, 0, 1,
			-1, 0, 1,
			-1, 0, 1,
		},
		nil,
	)
	err = imaging.Save(convolve3x3, "convolve3x3.jpg")
	if err != nil {
		panic(err)
	}
}

준비된 이미지 소스에 3x3 크기의 마스크로 공간 필터링을 합니다.

효과가 적용된 소스를 이미지 파일로 저장합니다.

Written on September 13, 2019