go - 图片合成
2018-03-05 本文已影响124人
反者道之动001
不知道写啥标题 但是不写又不好看, 哦 那就写吧。
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