🔥 image 인터페이스

236자
3분

Go 언어의 image 패키지는 이미지 처리를 위한 강력한 도구를 제공합니다. 이 패키지는 이미지를 나타내는 Image 인터페이스를 정의하고 있죠.

Package image에서 Image 인터페이스를 다음과 같이 정의하고 있습니다:

go
package image
 
type Image interface {
    ColorModel() color.Model
    Bounds() Rectangle
    At(x, y int) color.Color
}
 
go
package image
 
type Image interface {
    ColorModel() color.Model
    Bounds() Rectangle
    At(x, y int) color.Color
}
 

참고: Bounds 메서드의 Rectangle 반환 값은 실제로 image.Rectangle입니다. 이는 image 패키지 내부에서 선언되어 있기 때문이에요.

(자세한 내용은 공식 문서를 참조하세요.)

color.Colorcolor.Model 타입 역시 인터페이스이지만, 여기서는 미리 정의된 구현체인 color.RGBAcolor.RGBAModel을 사용할 거예요. 이러한 인터페이스와 타입은 image/color 패키지에 명시되어 있습니다.

이제 image 패키지를 사용하여 간단한 예제를 만들어 보겠습니다:

go
package main
 
import (
	"fmt"
	"image"
)
 
func main() {
	// image.Rect()를 사용하여 100x100 크기의 이미지 영역을 정의합니다.
	// 이 영역은 (0, 0)에서 시작하여 (100, 100)까지 확장됩니다.
	rect := image.Rect(0, 0, 100, 100)
 
	// image.NewRGBA()를 사용하여 RGBA 색상 모델을 가진 새 이미지를 생성합니다.
	// 생성된 이미지의 크기는 앞서 정의한 rect와 같습니다.
	m := image.NewRGBA(rect)
 
	// 이미지의 경계(Bounds)를 출력합니다.
	// 출력 결과: (0,0)-(100,100)
	fmt.Println(m.Bounds())
 
	// 이미지의 (0, 0) 위치에 있는 픽셀의 RGBA 값을 출력합니다.
	// 새로 생성된 이미지이므로, 모든 픽셀의 초기값은 (0, 0, 0, 0)입니다.
	fmt.Println(m.At(0, 0).RGBA())
}
 
go
package main
 
import (
	"fmt"
	"image"
)
 
func main() {
	// image.Rect()를 사용하여 100x100 크기의 이미지 영역을 정의합니다.
	// 이 영역은 (0, 0)에서 시작하여 (100, 100)까지 확장됩니다.
	rect := image.Rect(0, 0, 100, 100)
 
	// image.NewRGBA()를 사용하여 RGBA 색상 모델을 가진 새 이미지를 생성합니다.
	// 생성된 이미지의 크기는 앞서 정의한 rect와 같습니다.
	m := image.NewRGBA(rect)
 
	// 이미지의 경계(Bounds)를 출력합니다.
	// 출력 결과: (0,0)-(100,100)
	fmt.Println(m.Bounds())
 
	// 이미지의 (0, 0) 위치에 있는 픽셀의 RGBA 값을 출력합니다.
	// 새로 생성된 이미지이므로, 모든 픽셀의 초기값은 (0, 0, 0, 0)입니다.
	fmt.Println(m.At(0, 0).RGBA())
}
 

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다:

text
(0,0)-(100,100)
0 0 0 0
text
(0,0)-(100,100)
0 0 0 0

이 예제에서는 image.Rect()를 사용하여 이미지의 경계를 정의하고, image.NewRGBA()를 통해 새로운 RGBA 이미지를 생성했어요. 그리고 Bounds() 메서드로 이미지의 경계를 출력하고, At() 메서드로 특정 위치의 픽셀 값을 확인했습니다.

이처럼 Go 언어의 image 패키지를 활용하면 이미지를 쉽게 다룰 수 있어요.

YouTube 영상

채널 보기
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드
함수 객체의 보편적 구성 | 프로그래머를 위한 카테고리 이론
API 응답 지연과 복잡한 에러, NestJS 인터셉터로 관리하는 방법 | NestJS 가이드
인터셉터와 RxJS로 캐시 시스템 구축하기 | NestJS 가이드
입력을 전처리하는 Functor - Contravariant와 contramap 이해하기 | 프로그래머를 위한 카테고리 이론
함수 타입과 Hom-Set 이해하기 | 프로그래머를 위한 카테고리 이론
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드