当前位置: 首页 > news >正文

用golang 实现给图片添加文字水印

package mainimport ("fmt""github.com/golang/freetype""image""image/draw""image/jpeg""io""os""time"
)func main() {// 打开原始图片file, err := os.Open("004.jpeg")if err != nil {panic(err)}defer file.Close()// 解码图片img, _, err := image.Decode(file)if err != nil {panic(err)}// 创建一个画布bounds := img.Bounds()canvas := image.NewRGBA(bounds)// 打开图像文件fileInfo, err := os.Stat("004.jpeg")if err != nil {fmt.Sprintf("无法获取文件信息:%v", err)}fmt.Println("文件名:",fileInfo.Name())//添加该行问题解决file.Seek(0, io.SeekStart)// 读取图像信息config, _, err := image.DecodeConfig(file)if err != nil {fmt.Println("无法读取图像配置", err)}width := config.Widthheight := config.Heightfmt.Println("图片宽度为:", width)fmt.Println("图片高度为:", height)//s,err:=file.Stat()//fmt.Println(file.Name(),s.Size(),s.Sys(),s.Mode(),s.ModTime())// 绘制原始图片到画布上draw.Draw(canvas, bounds, img, image.Point{}, draw.Src)// 添加文字fontBytes, err := os.ReadFile("../ttf/kaiti.TTF") //解析中文//fontBytes, err := os.ReadFile("../ttf/luxisr.ttf") //不解析中文if err != nil {panic(err)}font, err := freetype.ParseFont(fontBytes)if err != nil {panic(err)}context := freetype.NewContext()context.SetDPI(72)context.SetFont(font)context.SetFontSize(25)context.SetClip(bounds)context.SetDst(canvas)context.SetSrc(image.Opaque)//pt := freetype.Pt(0, 5+int(context.PointToFixed(24)>>6))pt := freetype.Pt(250, height-34+int(context.PointToFixed(24)>>6)) //距离左侧5,距离顶部height-34=960-34=926context.DrawString("来源公众号:【码农编程进阶笔记】", pt)// 保存处理后的图片filename := fmt.Sprintf("output_%d.jpg", time.Now().Unix())output, err := os.Create(filename)if err != nil {panic(err)}defer output.Close()// 编码保存到文件jpeg.Encode(output, canvas, nil)
}

效果图:

http://www.lryc.cn/news/277289.html

相关文章:

  • 苹果电脑Markdown文本编辑Typora mac功能介绍
  • 大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章
  • Vue 缓存Hook:提高接口性能,减少重复请求
  • 【Python机器学习】用于回归的决策树
  • numpy库的一些常用函数
  • 成员变量与局部变量的区别?
  • ES6---判断对象是否为{}
  • 高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
  • oracle重启数据库lsnrctl重启监听
  • 08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置
  • JAVA基础学习笔记-day15-File类与IO流
  • WPF ComboBox限制输入长度
  • windows配置网络IP地址的方法
  • windows配置电脑网络IP的方法
  • MySQL,原子性rename
  • FPGA之按键消抖
  • 国内知名的技术平台
  • C#操作注册表
  • Unity中BRP下的深度图
  • 物联网的感知层、网络层与应用层分享
  • kafka KRaft 集群搭建
  • oracle角色管理
  • 汽车信息安全--芯片厂、OEM安全启动汇总(2)
  • HarmonyOS 开发基础(五)Button
  • 带前后端H5即时通讯聊天系统源码
  • vsCode输出控制台中文乱码解决
  • 「服务器」4.新手小白如何安装服务器环境-宝塔
  • Docker安装MySql详细步骤
  • 【微服务合集】
  • Hadoop之mapreduce参数大全-2