ホームページ  >  記事  >  バックエンド開発  >  golang の画像タイプ変換

golang の画像タイプ変換

WBOY
WBOYオリジナル
2023-05-15 10:09:071096ブラウズ

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 という名前のファイルを開き、ファイル ハンドルを渡します。 to image .Decode 関数は画像を読み取ります。 Decode 関数は、image.Image 型オブジェクト img と string 型のエンコード形式を返します。エンコード形式を無視するには、_ 記号を使用します。最後に、画像の幅、高さ、その他の情報を含む画像の境界情報を出力します (img.Bounds())。

  1. 画像タイプの変換

明らかに、ある形式の画像を別の形式の画像に変換するには、2 つの異なるエンコーダを使用する必要があります。 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 関数を使用して、 read 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
}

上記のサンプル コードでは、draw パッケージの CatmullRom.Scale が使用されるサイズ変更関数を定義します。元の画像を指定したサイズに変換します。サイズ変更関数に渡す幅と高さのパラメーターは、それぞれ調整された画像の幅と高さを表します。幅は 200 ピクセルで、高さは画像のアスペクト比から計算されます。これにより、画像を比例的に拡大縮小することができます。

概要:

この記事では、画像の読み込みや画像サイズの調整など、Go言語で画像の型を変換する方法を簡単に紹介します。実際の開発では、開発者は特定のニーズに基づいてさまざまな画像エンコーダや画像サイズ変更ツールを選択し、独自の画像処理機能を実装できます。

以上がgolang の画像タイプ変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。