go - 图片合成

不知道写啥标题 但是不写又不好看, 哦 那就写吧。

package main

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

func main() {
    imgb, _ := os.Open("image.jpg")
    img, _ := jpeg.Decode(imgb)
    defer imgb.Close()

    wmb, _ := os.Open("watermark.png")
    watermark, _ := png.Decode(wmb)
    defer wmb.Close()

    offset := image.Pt(200, 200)
    b := img.Bounds()
    m := image.NewRGBA(b)
    draw.Draw(m, b, img, image.ZP, draw.Src)
    draw.Draw(m, watermark.Bounds().Add(offset), watermark, image.ZP, draw.Over)

    imgw, _ := os.Create("watermarked.jpg")
    jpeg.Encode(imgw, m, &jpeg.Options{jpeg.DefaultQuality})
    defer imgw.Close()
}

上面的代码来源自 https://stackoverflow.com/questions/16100023/manipulating-watermark-images-with-go 的答案。

_的地方替换下就可以, 如果都是注释,方式一大堆代码看不清楚。

注意下这里的格式
jpeg.Decode 或者 png.Decode都有可能解析出错。

原因一般都是图片格式不对, png的图不能用jpge的解析哦, 记得对号入座。

还有png的格式不一样是真的png格式, 比如本来就是jpge的格式,然后改了后缀成png, 那也是jpg格式

图片合成可以多个贴 贴贴

楼上代码亲测可用, 如果不行就要么是图片有问题, 要么路径错误。

路径的话绝对理解就是从盘符开始, 比如 D:/www/go/src/...


先更新到这里, 午安,

END

你可能感兴趣的:(go - 图片合成)