...

パッケージ png

import "image/png"
概要
目次

概要 ▾

png パッケージは PNG 画像デコーダとエンコーダを実装します。

PNG 仕様は https://www.w3.org/TR/PNG/ にあります。

func Decode

func Decode(r io.Reader) (image.Image, error)

Decode は r から PNG 画像を読み込み,それを image.Image として返します。 返される Image の種類は PNG の内容によって異なります。

コード:

// この例では, PNG 画像のみをデコードできる png.Decode を使用しています。
// 一般的な image.Decode を使用することを検討してください。
// 登録されている任意の画像形式をスニッフィングしてデコードできます。
img, err := png.Decode(gopherPNG())
if err != nil {
    log.Fatal(err)
}

levels := []string{" ", "░", "▒", "▓", "█"}

for y := img.Bounds().Min.Y; y < img.Bounds().Max.Y; y++ {
    for x := img.Bounds().Min.X; x < img.Bounds().Max.X; x++ {
        c := color.GrayModel.Convert(img.At(x, y)).(color.Gray)
        level := c.Y / 51 // 51 * 5 = 255
        if level == 5 {
            level--
        }
        fmt.Print(levels[level])
    }
    fmt.Print("\n")
}

func DecodeConfig

func DecodeConfig(r io.Reader) (image.Config, error)

DecodeConfig は,画像全体をデコードせずに PNG 画像のカラーモデルと寸法を返します。

func Encode

func Encode(w io.Writer, m image.Image) error

Encode は Image m を PNG フォーマットで w に書き込みます。 どのような画像でもエンコードできますが, image.NRGBA ではない画像は可逆的にエンコードされる可能性があります。

コード:

const width, height = 256, 256

// 与えられた幅と高さのカラー画像を作成します。
img := image.NewNRGBA(image.Rect(0, 0, width, height))

for y := 0; y < height; y++ {
    for x := 0; x < width; x++ {
        img.Set(x, y, color.NRGBA{
            R: uint8((x + y) & 255),
            G: uint8((x + y) << 1 & 255),
            B: uint8((x + y) << 2 & 255),
            A: 255,
        })
    }
}

f, err := os.Create("image.png")
if err != nil {
    log.Fatal(err)
}

if err := png.Encode(f, img); err != nil {
    f.Close()
    log.Fatal(err)
}

if err := f.Close(); err != nil {
    log.Fatal(err)
}

type CompressionLevel 1.4

type CompressionLevel int
const (
    DefaultCompression CompressionLevel = 0
    NoCompression      CompressionLevel = -1
    BestSpeed          CompressionLevel = -2
    BestCompression    CompressionLevel = -3
)

type Encoder 1.4

Encoder は, PNG 画像のエンコードを設定します。

type Encoder struct {
    CompressionLevel CompressionLevel

    // BufferPool は,画像をエンコードするときに一時的な EncoderBuffers を取得するためのバッファプールをオプションで指定します。
    BufferPool EncoderBufferPool // Go 1.9
}

func (*Encoder) Encode 1.4

func (enc *Encoder) Encode(w io.Writer, m image.Image) error

Encode は Image m を PNG フォーマットで w に書き込みます。

type EncoderBuffer 1.9

EncoderBuffer は, PNG 画像のエンコードに使用されるバッファを保持しています。

type EncoderBuffer encoder

type EncoderBufferPool 1.9

EncoderBufferPool は, EncoderBuffer 構造体の一時インスタンスを取得して返すためのインターフェースです。 これは,複数の画像をエンコードするときにバッファを再利用するために使用できます。

type EncoderBufferPool interface {
    Get() *EncoderBuffer
    Put(*EncoderBuffer)
}

type FormatError

FormatError は,入力が有効な PNG ではないことを報告します。

type FormatError string

func (FormatError) Error

func (e FormatError) Error() string

type UnsupportedError

UnsupportedError は,入力が有効だが未実装の PNG 機能を使用していることを報告します。

type UnsupportedError string

func (UnsupportedError) Error

func (e UnsupportedError) Error() string