[Go 공식문서 한국어 정리] ①4①. Go image/draw 패키지
Go image/draw 패키지
https://go.dev/blog/go-imagedraw-package
image/draw 패키지는 단 하나의 작업만 정의합니다: 소스 이미지를 대상 이미지에 그리는 것입니다. 이때 선택적인 마스크 이미지를 통과할 수 있습니다. 이 하나의 작업으로 다양한 이미지 처리를 우아하게 하고 효율적으로 처리할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① 서론
합성(Composition)은 Porter와 Duff의 “Compositing Digital Images” 논문을 기반으로 하며, 마스크 파라미터를 추가한 공식입니다:
dst = (src IN mask) OP dst
마스크가 없으면(nil)은 와전히 불투명한 마스크로 간주됩니다.
② 핵심 개념
1. Over 연산자: 소스 이미지를 대상 이미지 위에 자연스럽게 레이어링합니다. 소스의 알파값이 높을수록 대상의 변경이 크죠.
2. Src 연산자: 대상 이미지의 원래 내용을 무시하고 소스를 그대로 복사합니다. 소스와 마스크가 모두 불투명일 때 Over와 같은 결과를 내지만 더 빠릅니다.
3. draw.Image 인터페이스: image.Image에 Set(x, y int, c color.Color) 메서드를 추가한 인터페이스로, 변경 가능한 대상 이미지를 나타냅니다.
③ 주요 내용 상세
Draw 함수
func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)
- dst: 대상 이미지
- r: dst에서 그릴 사각형
- src: 소스 이미지
- sp: src에서 r.Min에 맞출 위치
- op: Over 또는 Src
사각형 채우기
image.Uniform을 소스로 사용하면 단색으로 사각형을 채울 수 있습니다. image.Transparent은 투명한 사각형(또는 검은)을 채워 초기화할 때 사용합니다.
이미지 복사
소스 이미지의 사각형을 대상 좌표공간으로 변환하여 Draw를 호출하면 됩니다. src.Bounds()를 사용하면 전체 이미지를 복사할 수 있습니다.
이미지 스크롤중첩된 대상과 소스를 사용해 이미지를 그대로 복사하면 스크롤이 됩니다. Go의 본조 copy 함수처럼 중첩된 영역도 안전하게 처리합니다.
마스크를 통한 그리기
DrawMask를 사용하면 맄스크 이미지를 통과해 원형 모양으로 그리거나 폰트 글리프를 그릴 수 있습니다. 마스크는 color.AlphaModel을 사용하는 이미지를 사용합니다.
④ 실전 활용
- 이미지 하나에 다른 이미지를 중첩하는 작업에 image/draw를 사용합니다.
- 웹에서 사용하는 캐나스 2D 게임의 스프라이트를 그릴 때 유용합니다.
- 이미지 마스킹을 통해 원형 자르기, 부분적 투명화를 구현할 수 있습니다.
- 폰트 렌더링시 글리프를 이미지에 그리는 데 사용합니다.
⑤ 정리
image/draw는 드링한 가지 작업을 정의하면서도 다양한 이미지 처리 작업을 포함합니다. Over와 Src 연산자를 이해하고 Draw함수를 사용하면 이미지 합성, 복사, 스크롤, 마스킹을 쉽게 처리할 수 있습니다.
#Go #Golang #image #draw #이미지처리 #그래픽스 #공식문서

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30