> 백엔드 개발 > Golang > Golang에서 이미지를 연결하는 방법은 무엇입니까?

Golang에서 이미지를 연결하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-06 11:14:02
원래의
758명이 탐색했습니다.

How to Concatenate Images in Golang?

Golang에서 이미지 연결

문제

Go는 강력한 이미지 조작 기능을 제공하지만 사용자는 여러 개의 작은 이미지에서 단일 이미지를 만드는 데 어려움을 겪는 경우가 많습니다. . 구체적으로, 두 개의 PNG 또는 JPEG 파일을 어떻게 연결하여 포괄적인 이미지를 형성할 수 있습니까?

분석

제공된 코드는 PNG 파일을 RGBA 형식으로 읽는 방법을 보여줍니다.

imgFile, err := os.Open(path)
if err != nil {
    return Image{}, err
}
img, _, err := image.Decode(imgFile)
if err != nil {
    return Image{}, err
}

rgba := image.NewRGBA(img.Bounds())
if rgba.Stride != rgba.Rect.Size().X*4 {
    return Image{}, fmt.Errorf("unsupported stride")
}
draw.Draw(rgba, rgba.Bounds(), img, image.Point{0, 0}, draw.Src)
로그인 후 복사

그러나 문제의 핵심은 여러 RGBA 데이터 세트를 단일 이미지로 결합하는 방법을 이해하는 것입니다.

해결책

해결책에는 다음과 같은 새로운 빈 이미지(NewRGBA)를 만드는 것이 포함됩니다. 두 원본 이미지를 모두 수용할 수 있는 충분한 크기입니다. 그런 다음 Draw 메서드를 사용하여 확장된 이미지의 지정된 부분에 각 이미지를 오버레이할 수 있습니다.

// Load two images
imgFile1, err := os.Open("test1.jpg")
if err != nil {
    fmt.Println(err)
}
imgFile2, err := os.Open("test2.jpg")
if err != nil {
    fmt.Println(err)
}
img1, _, err := image.Decode(imgFile1)
if err != nil {
    fmt.Println(err)
}
img2, _, err := image.Decode(imgFile2)
if err != nil {
    fmt.Println(err)
}

// Starting position of the second image
sp2 := image.Point{img1.Bounds().Dx(), 0}

// New rectangle for the second image
r2 := image.Rectangle{sp2, sp2.Add(img2.Bounds().Size())}

// Rectangle for the big image
r := image.Rectangle{image.Point{0, 0}, r2.Max}

// Create a new image
rgba := image.NewRGBA(r)

// Draw the two images
draw.Draw(rgba, img1.Bounds(), img1, image.Point{0, 0}, draw.Src)
draw.Draw(rgba, r2, img2, image.Point{0, 0}, draw.Src)

// Export the image
out, err := os.Create("./output.jpg")
if err != nil {
    fmt.Println(err)
}

var opt jpeg.Options
opt.Quality = 80

jpeg.Encode(out, rgba, &opt)
로그인 후 복사

참고: 이 방법은 두 번째 이미지의 높이를 유지합니다. 첫 번째 이미지의 키가 크면 잘립니다.

위 내용은 Golang에서 이미지를 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿