垂直翻转图片 · Golang

Go语言实现图片的上下翻转,用到标准库中的image包。将原图片的像素映射到上下颠倒的位置。

import "image"

func vFlip(m image.Image) image.Image {
    mb := m.Bounds()
    dst := image.NewRGBA(image.Rect(0, 0, mb.Dx(), mb.Dy()))
    for x := mb.Min.X; x < mb.Max.X; x++ {
        for y := mb.Min.Y; y < mb.Max.Y; y++ {
            // 设置像素点,此调换了Y坐标以达到垂直翻转的目的
            dst.Set(x, mb.Max.Y-y, m.At(x, y))
        }
    }
    return dst
}

GIF版,改来改去能用了,可能并没有写到最好

func vFlipGIF(img *gif.GIF) {
    p := img.Image[0].Rect.Max.Sub(img.Image[0].Rect.Min)
    for i := 0; i < len(img.Image); i++ {
        m := img.Image[i]
        mb := m.Bounds()
        dst := image.NewPaletted(image.Rect(
            mb.Max.X,
            p.Y-mb.Max.Y,
            mb.Min.X,
            p.Y-mb.Min.Y,
        ), m.Palette)
        for x := mb.Min.X; x < mb.Max.X; x++ {
            for y := mb.Min.Y; y < mb.Max.Y; y++ {
                // 设置像素点,此调换了Y坐标以达到垂直翻转的目的
                dst.Set(x, p.Y - y - 1, m.At(x, y))
            }
        }
        img.Image[i] = dst
    }
}