当前位置: 首页 > 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)
}

效果图:

相关文章:

用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 …...

苹果电脑Markdown文本编辑Typora mac功能介绍

Typora mac是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外&#x…...

大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章

最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…...

Vue 缓存Hook:提高接口性能,减少重复请求

前言 在开发 Web 应用时,我们经常会遇到需要重复调用接口的场景。例如,当用户频繁刷新页面或进行某个操作时,我们可能需要多次请求相同的数据。这不仅会增加服务器负担,还会导致用户体验下降。为此,我们可以使用缓存机…...

【Python机器学习】用于回归的决策树

用于回归的决策树与用于分类的决策树类似,在DecisionTreeRegressor中实现。DecisionTreeRegressor不能外推,也不能在训练数据范围之外的数据进行预测。 利用计算机内存历史及格的数据进行实验,数据展示: import pandas as pd im…...

numpy库的一些常用函数

文章目录 广播(broadcast)迭代数组数组运算修改数组的形状 修改数组维度连接数组分割数组数组元素的添加与删除Numpy算术函数Numpy 统计函数Numpy排序、条件筛选函数条件筛选 import numpy as np anp.arange(15).reshape(3,5)aarray([[ 0, 1, 2, 3, …...

成员变量与局部变量的区别?

如果你现在需要准备面试,可以关注我的公众号:”Tom聊架构“,回复暗号:”578“,领取一份我整理的50W字面试宝典,可以帮助你提高80%的面试通过率,价值很高!! 语法形式&…...

ES6---判断对象是否为{}

介绍 使用es6语法判断一个对象是否为{} 示例 使用ES6的Object.keys()方法,返回值是对象中属性名组成的数组 let obj {}let keys Object.keys(obj) if(keys.length){alert(对象不为{}) }else{alert(对象为{}) }代码地址 https://gitee.com/u.uu.com/js-test/b…...

高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例

详细介绍 MinIO 是一款流行的开源对象存储系统,设计上兼容 Amazon S3 API,主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点: 架构与特性: 开源与跨平台&am…...

oracle重启数据库lsnrctl重启监听

oracle重启数据库lsnrctl重启监听 su到oracle用户下,命令 su - oracle切换需要启动的数据库实例: export ORACLE_SIDorcl进入Sqlplus控制台,命令: sqlplus /nolog以系统管理员登录,命令: connect / as sysdba如果是…...

08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置

目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示:log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示:将 test2 主题下的消息的保存时间设为10个小时1、先查看test2主题下的配置2、然后设置消息的保存时间3、然后再…...

JAVA基础学习笔记-day15-File类与IO流

JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…...

WPF ComboBox限制输入长度

在WPF中&#xff0c;你可以通过两种方式来限制ComboBox的输入长度&#xff1a; 使用PreviewTextInput事件&#xff1a;你可以在这个事件的处理程序中检查输入文本的长度&#xff0c;如果超过最大长度则阻止输入。 <ComboBox PreviewTextInput"ComboBox_PreviewTextIn…...

windows配置网络IP地址的方法

在Windows系统中配置网络IP地址&#xff0c;可以按照以下步骤进行&#xff1a; 打开“控制面板”&#xff0c;选择“网络和Internet”选项。在“网络和Internet”窗口中&#xff0c;单击“网络和共享中心”选项。在“网络和共享中心”窗口中&#xff0c;单击“更改适配器设置”…...

windows配置电脑网络IP的方法

通过控制面板配置IP地址&#xff1a; 打开控制面板&#xff1a; 可以通过在开始菜单中搜索“控制面板”来打开控制面板。选择“网络和Internet”或“网络和共享中心”&#xff1a; 在控制面板中&#xff0c;根据 Windows 版本不同&#xff0c;选中对应的选项进入网络设置。点击…...

MySQL,原子性rename

RENAME TABLE old_table TO backup_table, new_table TO old_table;...

FPGA之按键消抖

目录 1.原理 2.代码 2.1 key_filter.v 2.2 tb_key_filter.v 1.原理 按键分为自锁式按键和机械按键&#xff0c;图左边为自锁式按键 上图为RS触发器硬件消抖&#xff0c;当按键的个数比较多时常常使用软件消抖。硬件消抖会使用额外的器件占用电路板上的空间。 思路就是使用延…...

国内知名的技术平台

1、csdn&#xff0c;中文最大的技术交流平台 2、iteye&#xff0c;程序员的交流平台&#xff0c;归属csdn 3、cnblogs&#xff0c;这个也不错 4、简书也不错...

C#操作注册表

说明 今天用C#开发了一个简单的服务&#xff0c;需要设置成为自启动&#xff0c;网上有很多方法&#xff0c;放到启动运行等&#xff0c;但是今天想介绍一个&#xff0c;通过修改注册表实现&#xff0c;同时介绍一下操作注册表。 private void TestReg(){//仅对当前用户有效 H…...

Unity中BRP下的深度图

文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中&#xff0c;我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中&#xff0c;我们来看一下BRP下深度…...

图像修复效率提升:设计师与开发者必备的7个开源AI模型应用技巧

图像修复效率提升&#xff1a;设计师与开发者必备的7个开源AI模型应用技巧 【免费下载链接】ComfyUI-BrushNet ComfyUI BrushNet nodes 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BrushNet 在数字创作与内容修复领域&#xff0c;如何快速高效地消除图像瑕疵…...

ECharts地图标注避坑指南:解决区域地图显示不全、标注错位等常见问题

ECharts地图标注避坑指南&#xff1a;解决区域地图显示不全、标注错位等常见问题 当你在使用ECharts绘制区域地图时&#xff0c;是否遇到过地图显示不全、标注点位置偏移、JSON数据格式错误等问题&#xff1f;这些问题看似简单&#xff0c;却可能耗费开发者大量时间排查。本文将…...

破局 AIGC 检测重围:PaperXie 如何让论文从 “机器量产“ 回归 “学术原创“——3000 字深度解构双效降重新范式

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/weight?type1https://www.paperxie.cn/weight?type1 引言&#xff1a;当学术写作撞上 AIGC 检测&#xff0c;毕业与投稿的双重困局凌晨两点的图书馆&#xff0c;屏幕上刺眼…...

H3C F1070防火墙console密码恢复实战指南

1. 当console密码成为拦路虎时 刚接手公司网络设备那会儿&#xff0c;我就被H3C F1070防火墙来了个下马威。那天机房搬迁后需要调试设备&#xff0c;结果发现前任管理员留下的console密码早已失效。这种场景就像你拿着钥匙回老家&#xff0c;却发现锁芯被换了一样尴尬。作为网络…...

从零开始构建你的渗透测试字典库:账号密码大字典与设备默认口令全解析

从零开始构建你的渗透测试字典库&#xff1a;账号密码大字典与设备默认口令全解析 在安全测试领域&#xff0c;一个高质量的字典库往往能决定渗透测试的效率上限。想象一下&#xff0c;当你面对一个需要爆破的系统时&#xff0c;手头拥有精准覆盖目标特征的字典&#xff0c;就…...

告别‘Illegal instruction’:为老旧ARM芯片(如鲲鹏920)定制MongoDB 4.4.9的完整避坑流程

为老旧ARM芯片定制MongoDB 4.4.9的完整避坑指南 当你在国产ARM服务器上部署MongoDB时&#xff0c;是否遇到过Illegal instruction错误&#xff1f;这个问题往往源于硬件与软件版本之间的指令集不匹配。本文将带你深入理解ARM架构的版本差异&#xff0c;并提供一套完整的解决方案…...

WeChatExporter:免费开源工具,轻松备份你的微信聊天记录到电脑

WeChatExporter&#xff1a;免费开源工具&#xff0c;轻松备份你的微信聊天记录到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾经担心过手机丢失、系统崩…...

Windows下用CMake和MinGW编译NLopt 2.6.2的完整指南(附测试代码)

Windows平台下NLopt 2.6.2源码编译与实战应用全解析 在科学计算与工程优化领域&#xff0c;NLopt作为一款开源的非线性优化库&#xff0c;因其丰富的算法支持和跨平台特性而广受欢迎。本文将深入探讨如何在Windows系统中从零开始构建NLopt 2.6.2开发环境&#xff0c;并通过完整…...

大气层系统全链路实战指南:从需求分析到风险控制的完整实施路径

大气层系统全链路实战指南&#xff1a;从需求分析到风险控制的完整实施路径 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层系统&#xff08;Atmosphere&#xff09;作为Switch定制化…...

Qwen3-0.6B-FP8效果对比:与Phi-3-mini、Gemma-2B在低资源设备上的实测PK

Qwen3-0.6B-FP8效果对比&#xff1a;与Phi-3-mini、Gemma-2B在低资源设备上的实测PK 想在小显存的电脑上跑个大模型&#xff0c;体验一下AI对话的乐趣&#xff0c;是不是总被“显存不足”的提示劝退&#xff1f;别急&#xff0c;今天我们就来一场专为“小显存”设备准备的AI模…...