Nextui Blocks – hello from a dynamic block!

package main

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

func main() {
	//图片
	img_file, err := os.Open("shu.jpg")
	if err != nil {
		fmt.Println("打开图片出错")
		fmt.Println(err)
		os.Exit(-1)
	}
	defer img_file.Close()
	img, err := jpeg.Decode(img_file)
	if err != nil {
		fmt.Println("把图片解码为结构体时出错")
		fmt.Println(img)
		os.Exit(-1)
	}
	//横竖类型
	var hengshu string
	if img.Bounds().Dx() < img.Bounds().Dy() {
		hengshu = "shu"
	} else {
		hengshu = "heng"
	}
	if hengshu == "" {
		fmt.Println("错误")
	}
	//水印
	wmb_file, err := os.Open("logo_t400.png")
	if err != nil {
		fmt.Println("打开水印图片出错")
		fmt.Println(err)
		os.Exit(-1)
	}
	defer wmb_file.Close()
	wmb_img, err := png.Decode(wmb_file)
	if err != nil {
		fmt.Println("把水印图片解码为结构体时出错")
		fmt.Println(err)
		os.Exit(-1)
	}

	//把水印写在右下角,并向0坐标偏移10个像素
	offset := image.Pt(img.Bounds().Dx()-wmb_img.Bounds().Dx()-10, img.Bounds().Dy()-wmb_img.Bounds().Dy()-10)
	b := img.Bounds()
	//根据b画布的大小新建一个新图像
	m := image.NewRGBA(b)

	//image.ZP代表Point结构体,目标的源点,即(0,0)
	//draw.Src源图像透过遮罩后,替换掉目标图像
	//draw.Over源图像透过遮罩后,覆盖在目标图像上(类似图层)

	draw.Draw(m, b, img, image.ZP, draw.Src)

	// 创建新的图像
	draw.Draw(m, wmb_img.Bounds().Add(offset), wmb_img, image.ZP, draw.Over)
	//生成新图片new.jpg,并设置图片质量
	imgw, err := os.Create("new.jpg")
	jpeg.Encode(imgw, m, &jpeg.Options{100})
	defer imgw.Close()

	fmt.Println("添加水印图片结束请查看")
}
Go

In:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注