golang合成图片、加水印
时间:2019-01-23 02:20:01 +0800 CST 浏览:2283

go image标准库实现合成图片、加水印

package main

import (
    "flag"
    "image"
    "image/draw"
    "image/png"
    "os"
    "path"
)

var (
    bg      = flag.String("bg", "bg.png", "背景图片")
    pt      = flag.String("pt", "pt.png", "前景图片")
    offsetX = flag.Int("offsetX", 0, "x轴偏移值")
    offsetY = flag.Int("offsetY", 0, "y轴偏移值")
    prefix  = flag.String("prefix", "test_", "文件名前缀")
)

func main() {
    flag.Parse()
    mergeImage(*pt)
}

func mergeImage(file string) {
    imgb, _ := os.Open(*bg)
    img, _ := png.Decode(imgb)
    defer imgb.Close()
    b1 := img.Bounds()

    wmb, _ := os.Open(file)
    watermark, _ := png.Decode(wmb)
    b2 := watermark.Bounds()
    defer wmb.Close()

    offset := image.Pt((b1.Max.X-b2.Max.X)/2+*offsetX, (b1.Max.Y-b2.Max.Y)/2+*offsetY)
    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(*prefix + path.Base(file))
    png.Encode(imgw, m)
    defer imgw.Close()
}

上面的代码只是提供一个思路,只支持png图片,需要jpg可自行修改。

golang_S1-l6gVIX.jpg



如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧