• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 기타게임 소스자료실
    • 기타게임 소스자료실 기타 ()
    • [Go 공식문서 한국어 정리] ⓪8. Go의 이미지 합성: image/draw 패키지

      • 오뉴노노
      • 2026.05.30 - 01:11 0

    [Go 공식문서 한국어 정리] ⓪8. Go의 이미지 합성: image/draw 패키지

    원문 제목: The Go image/draw package
    작성자: Nigel Tao

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 1. 서론 — 이 문서가 다루는 내용
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Go의 image/draw 패키지는 이미지 합성(compositing)을 위한 핵심 도구입니다.
    단 하나의 Draw 연산만으로도 다양한 이미지 조작 작업을 우아하고 효율적으로 수행할 수 있습니다.
    Plan 9 그래픽 라이브러리와 X Render 확장의 스타일을 따르며, Porter-Duff의 "Compositing Digital Images" 논문을 기반으로 합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 2. 핵심 개념
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① Draw 연산 — src를 dst 위에 그리기
    image/draw은 단 한 가지 연산만 정의합니다: 소스 이미지(src)를 대상 이미지(dst) 위에 그리는 것입니다.
    선택적으로 마스크(mask) 이미지를 적용할 수 있으며, 이를 통해 다양한 효과를 구현합니다.

    ② Porter-Duff 합성 모델
    기본 공식은 dst = (src IN mask) OP dst입니다.
    마스크가 완전히 불투명하면 Porter-Duff의 원래 공식인 dst = src OP dst로 단순화됩니다.
    Go에서는 nil 마스크가 무한히 큰 불투명 마스크와 동일합니다.

    ③ Over vs Src — 두 가지 합성 연산자
    Over는 소스를 대상 위에 자연스럽게 레이어링하며, 투명도(alpha)를 고려합니다.
    Src는 소스를 그대로 복사하며 대상의 원래 내용을 무시합니다.
    둘 다 완전히 불투명할 때 결과는 같지만, Src가 일반적으로 더 빠릅니다.

    ④ 기하학적 정렬 — 사각형과 좌표
    합성에는 세 이미지 각각의 사각형 영역이 필요합니다.
    Draw 함수는 dst, r(사각형), src, sp(소스 포인트), op(연산자) 다섯 인자를 받습니다.
    DrawMask는 마스크와 마스크 포인트를 추가로 받아 총 일곱 인자를 사용합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 3. 주요 내용 상세
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    image/draw 패키지의 핵심은 단순함에 있습니다.
    한 개의 Draw 함수로 이미지 복사, 스크롤링, 색상 채우기, 마스킹까지 모두 처리할 수 있습니다.

    색상으로 사각형을 채울 때는 image.Uniform을 소스로 사용합니다.
    image.Uniform은 하나의 색상을 실질적으로 무한히 큰 이미지로 해석하는 타입입니다.
    예를 들어 image.NewRGBA로 생성한 이미지에 파란색을 채우려면 draw.Draw(m, m.Bounds(), &image.Uniform{blue}, image.ZP, draw.Src)를 호출하면 됩니다.

    이미지를 투명으로 초기화하려면 image.Transparent를 사용합니다.
    이는 alpha 값이 0인 image.Uniform입니다.

    이미지 복사는 소스 사각형(sr)을 대상 좌표(dp)로 변환하여 수행합니다.
    r := image.Rectangle{dp, dp.Add(sr.Size())}로 대상 사각형을 만들고 draw.Draw(dst, r, src, sr.Min, draw.Src)를 호출합니다.

    스크롤링은 이미지 자신에게 복사하는 것입니다.
    Go의 내장 copy 함수가 겹치는 슬라이스를 처리하듯, draw도 겹치는 소스와 대상을 안전하게 처리합니다.

    마스크를 통한 그리기는 DrawMask 함수로 수행합니다.
    원형 마스크를 직접 구현하려면 image.Image 인터페이스를 만족하는 타입을 정의하면 됩니다.
    Bounds, ColorModel, At 메서드를 구현하고, 픽셀별로 alpha 값을 계산합니다.

    폰트 글리프(glyph)를 그릴 때도 마스크를 활용합니다.
    image.Uniform으로 색상 소스를 만들고, image.Alpha 마스크로 글리프 형태를 적용하여 draw.DrawMask를 호출합니다.

    성능 최적화를 위해 DrawMask는 인터페이스 타입을 받지만 내부에서 타입 어설션을 수행합니다.
    image.RGBA끼리의 복사나 image.Alpha 마스크 적용 같은 일반적인 경우에 특수화된 구현을 사용합니다.
    타입 어설션이 실패하면 일반적인 At/Set 메서드를 사용하는 폴백 코드가 실행됩니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 4. 실전 활용 / 예시
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    웹 서비스에서 사용자 업로드 이미지를 썸네일로 변환할 때 image/draw를 활용할 수 있습니다.
    GIF나 JPEG, PNG 등 다양한 포맷을 디코딩한 후 image.RGBA로 변환하는 데 필수적입니다.
    게임 개발에서 스프라이트 시트에서 특정 영역만 잘라 화면에 그릴 때도 Draw 함수 하나로 해결됩니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 5. 정리
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    image/draw은 단 하나의 Draw 연산으로 이미지 합성의 거의 모든 것을 다룹니다.
    Porter-Duff 모델을 기반으로 하며, 마스크와 기하학적 정렬을 통해 유연성을 제공합니다.
    성능을 위해 내부적으로 특수화된 구현을 사용하면서도 인터페이스 기반 설계로 확장성을 유지합니다.

    📎 출처 링크
    https://go.dev/blog/image-draw

    #Go #Golang #image #draw #공식문서

    이 게시물을..
    N
    0
    0
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구오뉴노노
    • 0
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] ⑭. Rustlings 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑬. The Unstable Book 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook 9 2026 05.30 [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros 4 2026 05.30 [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns 12 2026 05.30

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 306
    기본 (305) 제목 날짜 수정 조회 댓글 추천 비추
    기타 정렬 검색
    • 포인트 획득 공지
      4
      2026.04.24 - 19:48 4639 4
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4496 8
    • 인증메일 공지
      2
      2026.03.15 - 16:42 4390 2
    • 파일링크 및 인증메일 발송 관련 문의 안내
      8
      2026.03.14 - 22:03 4984 8
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5771
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7589 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 849
    305
    기타
    피파온라인 3 클라이언트
    lyw01234 2026.05.30 - 23:17 40
    304
    기타
    [Rust 공식문서 한국어 정리] ⑭. Rustlings
    오뉴노노 2026.05.30 - 08:38 11
    303
    기타
    [Rust 공식문서 한국어 정리] ⑬. The Unstable Book
    오뉴노노 2026.05.30 - 08:38 11
    302
    기타
    [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook
    오뉴노노 2026.05.30 - 08:37 9
    301
    기타
    [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros
    오뉴노노 2026.05.30 - 08:36 4
    300
    기타
    [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns
    오뉴노노 2026.05.30 - 08:36 12
    299
    기타
    [Rust 공식문서 한국어 정리] ⑨. Rust API Guidelines
    오뉴노노 2026.05.30 - 08:35 12
    298
    기타
    [Rust 공식문서 한국어 정리] ⑧. The Rust Performance Book
    오뉴노노 2026.05.30 - 08:34 7
    297
    기타
    [Rust 공식문서 한국어 정리] ⑦. Asynchronous Programming in Rust
    오뉴노노 2026.05.30 - 08:34 6
    296
    기타
    [Rust 공식문서 한국어 정리] ⑥. The Rust Edition Guide
    오뉴노노 2026.05.30 - 08:33 9
    295
    기타
    [Rust 공식문서 한국어 정리] ⑤. The Cargo Book
    오뉴노노 2026.05.30 - 08:32 1
    294
    기타
    [Rust 공식문서 한국어 정리] ④. The Rustonomicon
    오뉴노노 2026.05.30 - 08:32
    293
    기타
    [Rust 공식문서 한국어 정리] ③. The Rust Reference
    오뉴노노 2026.05.30 - 08:31
    292
    기타
    [Rust 공식문서 한국어 정리] ②. Rust By Example
    오뉴노노 2026.05.30 - 08:31
    291
    기타
    [Rust 공식문서 한국어 정리] ①. The Rust Programming Language (The Book)
    오뉴노노 2026.05.30 - 08:30 2
    290
    기타
    [Go 공식문서 한국어 정리] ⑤7. Codewalk: Share Memory By Communicating
    오뉴노노 2026.05.30 - 03:29 7
    289
    기타
    [Go 공식문서 한국어 정리] ⑤6. Codewalk: 마르코프 체인 텍스트 생성
    오뉴노노 2026.05.30 - 03:26 2
    288
    기타
    [Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
    오뉴노노 2026.05.30 - 03:25 1
    287
    기타
    [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    오뉴노노 2026.05.30 - 03:24 2
    286
    기타
    [Go 공식문서 한국어 정리] ⑤3. 통합 테스트 커버리지 프로파일링
    오뉴노노 2026.05.30 - 03:23 1
    • 1 2 3 4 5 6 7 8 9 10 .. 16
    • / 16 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay