> 백엔드 개발 > Golang > golang 이미지 유형 변환

golang 이미지 유형 변환

WBOY
풀어 주다: 2023-05-15 10:09:07
원래의
1189명이 탐색했습니다.

Go는 네트워크 프로그래밍, 클라우드 컴퓨팅, 분산 시스템 및 기타 분야에서 널리 사용되는 프로그래밍 언어로, 이미지 처리에도 점차 주목을 받고 있습니다. Go 언어에서 이미지 유형 변환은 JPEG 형식의 이미지를 PNG 형식의 이미지로 변환하는 것과 같이 한 형식의 이미지를 다른 형식으로 변환할 수 있는 일반적인 이미지 처리 작업입니다. 이 글에서는 Go 언어에서 이미지 유형을 변환하는 방법을 소개합니다.

  1. 사진 읽기

이미지 유형을 변환하기 전에 먼저 이미지를 읽어야 합니다. 이미지 패키지는 Go 언어의 표준 라이브러리에 제공되며 기본 픽셀 작업을 지원하는 것 외에도 이미지 읽기 및 쓰기를 위한 인터페이스도 제공합니다. 이미지 패키지의 Decode 기능을 사용하여 이미지를 읽을 수 있습니다. Decode 함수의 매개변수는 io.Reader 유형 매개변수이므로 os 패키지의 Open 함수를 사용하여 파일을 연 다음 파일 핸들을 Decode 함수에 전달할 수 있습니다.

다음은 샘플 코드입니다.

package main

import (
    "fmt"
    "image"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(img.Bounds())
}
로그인 후 복사

위 샘플 코드에서는 os 패키지의 Open 함수를 사용하여 image.jpg라는 파일을 연 다음 파일 핸들을 image.Decode 함수에 전달하여 읽습니다. 이미지. Decode 함수는 image.Image 유형 객체 img와 문자열 유형 인코딩 형식을 반환하며 인코딩 형식을 무시하기 위해 _ 기호를 사용합니다. 마지막으로 이미지의 너비, 높이 및 기타 정보가 포함된 이미지의 경계 정보(img.Bounds())를 인쇄합니다.

  1. 이미지 유형 변환

분명히 한 형식의 이미지를 다른 형식의 이미지로 변환하려면 두 가지 다른 인코더를 사용해야 합니다. Go 언어의 표준 라이브러리는 JPEG, PNG, GIF, BMP 및 기타 형식을 포함한 다양한 이미지 인코더를 제공합니다. 이미지 형식마다 인코더가 다르지만 동일한 인터페이스를 구현하므로 코드에서 동일한 방식을 사용하여 이미지를 다른 형식으로 변환할 수 있습니다.

다음은 JPEG 형식 이미지를 PNG 형식 이미지로 변환하는 샘플 코드입니다.

package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "image/png"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    out, err := os.Create("image.png")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer out.Close()

    err = png.Encode(out, img)
    if err != nil {
        fmt.Println(err)
        return
    }
}
로그인 후 복사

위 샘플 코드에서는 먼저 image/jpeg 패키지의 Decode 함수를 사용하여 JPEG 형식 이미지를 읽은 다음 image/png 패키지의 Encode 기능을 사용하면 이미지를 PNG 형식 파일에 씁니다. png.Encode 함수를 사용하더라도 인코더가 동일한 인터페이스를 구현하기 때문에 다른 형식의 이미지를 처리할 수 있다는 점에 유의해야 합니다.

  1. 이미지 크기 조정

이미지 유형을 변환할 때 이미지 크기도 조정해야 할 수도 있습니다. Go 언어의 표준 라이브러리는 픽셀 데이터를 처리하기 위한 이미지 패키지를 제공합니다. 개발자는 픽셀에 대해 직접 작업하여 이미지 크기를 조정할 수 있습니다. 이미지 패키지는 Resize, ResizeNRGBA, ResizeRGBA 등을 포함한 다양한 크기 조정 방법을 제공합니다. 다음은 이미지의 너비를 200픽셀로 조정하는 샘플 코드입니다.

package main

import (
    "fmt"
    "image"
    "image/jpeg"
    "image/png"
    "os"
)

func main() {
    file, err := os.Open("image.jpg")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()

    img, _, err := image.Decode(file)
    if err != nil {
        fmt.Println(err)
        return
    }

    newImg := resize(img, 200, 0)

    out, err := os.Create("image.png")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer out.Close()

    err = png.Encode(out, newImg)
    if err != nil {
        fmt.Println(err)
        return
    }
}

func resize(img image.Image, width, height uint) image.Image {
    if height == 0 {
        height = uint(float64(width) * float64(img.Bounds().Dy()) / float64(img.Bounds().Dx()))
    }
    newImg := image.NewRGBA(image.Rect(0, 0, int(width), int(height)))
    draw.CatmullRom.Scale(newImg, newImg.Bounds(), img, img.Bounds(), draw.Src, nil)
    return newImg
}
로그인 후 복사

위의 샘플 코드에서는 그리기 패키지의 CatmullRom.Scale 함수를 사용하여 원본 이미지를 변환하는 크기 조정 함수를 정의합니다. 지정된 크기로 크기를 조정합니다. 크기 조정 함수에 전달하는 너비와 높이 매개변수는 각각 조정된 이미지의 너비와 높이를 나타냅니다. 여기서 너비는 200픽셀이고 높이는 이미지의 종횡비로 계산됩니다. 이를 통해 이미지 크기를 비례적으로 조정할 수 있습니다.

요약:

이 글에서는 이미지 읽기, 이미지 크기 조정 등 Go 언어의 이미지 유형 변환 방법을 간략하게 소개합니다. 실제 개발에서 개발자는 자신의 이미지 처리 기능을 구현하기 위한 특정 요구 사항에 따라 다양한 이미지 인코더와 이미지 크기 조정 도구를 선택할 수 있습니다.

위 내용은 golang 이미지 유형 변환의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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