Composite

image/drawのDrawを使う。
マスクをかけるときはDrawMask。

Scale

golang.org/x/image/drawを使う。image/drawのスーパーセットになっている。
Scale用にScalerというinterfaceが定義されていて、BiLinearとかCatmullRomとかいくつかアルゴリズムが提供されている。

func (*Kernel) Scale でscaleする。

pngとかjpeg

image/pngやimage/jpegのDecode, Encodeを使う。
以下のようにimage/pngやimage/jpegをblank importしておくと画像フォーマットをよしなにデコードしてくれる。

import (
    "image"
    _ "image/jpeg"
    _ "image/png"
)

func decode(src io.Reader) {
    im, t, err := image.Decode(src)
}

pixel値取得

image.Image interfaceのAtを使う。

r, g, b ,a := im.At(x, y).RGBA()

pixel値設定

image.RGBA 等はSetメソッドがあるのでこれでpixel値を設定できる。
image.Image interfaceにはSetがないのでpng.Decode等で得たあとは

type Setter interface {
    Set(x, y int, c color.Color)
}

if sim, ok := im.(Setter); ok {
    // ...
}

というようにinterface定義して型アサーションをかける。

Crop

image.RGBA 等はSubImageメソッドがあるのでこれでCropできる。
image.Image interfaceにはSubImageがないのでpng.Decode等で得たあとは

type SubImager interface {
    SubImage(r image.Rectangle) image.Image
}

if sim, ok := im.(SubImager); ok {
    // ...
}

というようにinterface定義して型アサーションをかける。

广告
将在 10 秒后关闭
bannerAds