Come già accennato, è possibile filigranare le immagini con il pacchetto immagine/disegno.
Ecco un esempio pratico breve, l'aggiunta di un'immagine png trasparente ad un'immagine del JPEG e salvare come jpeg:
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()
}
image.jpg:

watermark.png:

risultato:

fonte
2013-04-19 14:05:14
veda questo articolo per la manipolazione delle immagini: http://golang.org/doc/articles/image_draw.html. Alcuni degli esempi sembrano coprire i tuoi bisogni, essenzialmente fondendo alcune immagini in un'altra con trasparenza alfa. – Mikke