package main import ( "fmt" "github.com/noelyahan/mergi" "github.com/noelyahan/impexp" "image" "log" ) func main() { // Let's import some images from local file system img, err := mergi.Import(impexp.NewFileImporter("testdata/tiger-2320819_960_720.jpg")) if err != nil { log.Fatal(err) } // 水印文件 watermarkImage, err := mergi.Import(impexp.NewFileImporter("testdata/mergi_logo_watermark.png")) if err != nil { log.Fatal(err) } // 水印位置 watermarkTopLeft(watermarkImage, img) watermarkTopLeftWithOpacity(watermarkImage, img) watermarkResizeTopRightWith(watermarkImage, img) watermarkEverywhere(watermarkImage, img) // Just for fun ;) // Lets create a identity card identityWatermark() } func watermarkTopLeft(watermarkImage, img image.Image) { res, err := mergi.Watermark(watermarkImage, img, image.Pt(0, 0)) if err != nil { log.Fatal(err) } mergi.Export(impexp.NewFileExporter(res, getPath("watermark_1.png"))) } func watermarkTopLeftWithOpacity(watermarkImage, img image.Image) { opecWatermark, err := mergi.Opacity(watermarkImage, 0.5) if err != nil { log.Fatal(err) } res, err := mergi.Watermark(opecWatermark, img, image.Pt(0, 0)) if err != nil { log.Fatal(err) } mergi.Export(impexp.NewFileExporter(res, getPath("watermark_1_opacity.png"))) } func watermarkResizeTopRightWith(watermarkImage, img image.Image) { b := watermarkImage.Bounds() w := b.Max.X / 4 h := b.Max.Y / 4 newWatermarkImage, _ := mergi.Resize(watermarkImage, uint(w), uint(h)) res, err := mergi.Watermark(newWatermarkImage, img, image.Pt(img.Bounds().Max.X-w, 0)) if err != nil { log.Fatal(err) } mergi.Export(impexp.NewFileExporter(res, getPath("watermark_2.png"))) } func watermarkEverywhere(watermarkImage, img image.Image) { b := watermarkImage.Bounds() w := b.Max.X / 4 h := b.Max.Y / 4 newWatermarkImage, _ := mergi.Resize(watermarkImage, uint(w), uint(h)) res := img var err error // Lets add watermarks all over the image for x := 0; x < w; x++ { for y := 0; y < h; y++ { res, err = mergi.Watermark(newWatermarkImage, res, image.Pt(img.Bounds().Max.X-(w*x), h*y)) if err != nil { log.Fatal(err) } } } mergi.Export(impexp.NewFileExporter(res, getPath("watermark_3.png"))) } func identityWatermark() { idCard, _ := mergi.Import(impexp.NewURLImporter("https://cdn.pixabay.com/photo/2013/07/12/19/03/id-154285_960_720.png")) profileImage, _ := mergi.Import(impexp.NewURLImporter("https://cdn.pixabay.com/photo/2017/08/30/17/27/business-woman-2697954_960_720.jpg")) cropedProfile, _ := mergi.Crop(profileImage, image.Pt(300, 50), image.Pt(217, 254)) finalImage, _ := mergi.Watermark(cropedProfile, idCard, image.Pt(20, 63)) mergi.Export(impexp.NewFileExporter(finalImage, getPath("watermark_4.png"))) } func getPath(name string) string { return fmt.Sprintf("examples/watermark/res/%s", name) }
Go 给图片添加水印
77 min read