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

【golang】25、图片操作

用 “github.com/fogleman/gg” 可以画线, 框
用 “github.com/disintegration/imaging” 可以变换颜色

一、渲染

1.1 框和字

import "github.com/fogleman/gg"func DrawRectangles(inPath string, cRects []ColorTextRect, fnImgNameChange FnImgNameChange) (string, error) {img, err := gg.LoadImage(inPath)if err != nil {return "", err}dc := gg.NewContextForImage(img)dc.SetLineWidth(10)for _, cRect := range cRects {dc.SetColor(cRect.Color)dc.DrawRectangle(float64(cRect.Rect.X), float64(cRect.Rect.Y), float64(cRect.Rect.Width), float64(cRect.Rect.Height))err := dc.LoadFontFace("ch.ttf", 60) // 青鸟华光简美黑.ttfif err != nil {log.Errorf("load font face error: %v", err)}textX, textY := float64(cRect.Rect.X+15), float64(cRect.Rect.Y+15)dc.DrawString(cRect.Text, textX, textY)dc.Stroke()}outPath := fnImgNameChange(inPath)if err := dc.SavePNG(outPath); err != nil {return "", err}return outPath, nil
}

二、裁剪

import "github.com/disintegration/imaging"func Clip(inPath string, rect entity.Rect, fnImgNameChange FnImgNameChange) (string, error) {img, err := imaging.Open(inPath)if err != nil {return "", err}croppedImg := imaging.Crop(img, image.Rect(int(rect.X), int(rect.Y), int(rect.X+rect.Width), int(rect.Y+rect.Height)))outPath := fnImgNameChange(inPath)if err := imaging.Save(croppedImg, outPath); err != nil {return "", err}return outPath, nil
}

相关文章:

【golang】25、图片操作

用 “github.com/fogleman/gg” 可以画线, 框 用 “github.com/disintegration/imaging” 可以变换颜色 一、渲染 1.1 框和字 import "github.com/fogleman/gg"func DrawRectangles(inPath string, cRects []ColorTextRect, fnImgNameChange FnImgNameChange) (st…...

kswapd0挖矿病毒攻击记录

文章目录 一、起因与病毒分析1、起因2、阿里云告警2.1 恶意脚本代码执行12.2 恶意脚本代码执行22.3恶意脚本代码执行32.4 恶意脚本代码执行4 3、病毒简单分析3.1 病毒的初始化3.2 病毒本体执行 4、总结 二、ubuntu自救指南1、病毒清理2、如何防御 一、起因与病毒分析 1、起因 …...

如何使用 takeUntil RxJS 操作符来声明性地管理订阅

简介 Angular 处理取消订阅可观察对象的操作,比如从 HTTP 服务返回的可观察对象或者使用 async 管道时。然而,对于其他情况,管理所有订阅并确保取消长期存在的订阅可能会变得困难。而且,取消大部分订阅的策略也会带来自己的问题。…...

在Centos中用Docker部署oracle-12c

一、介绍 Oracle 12c是Oracle 11g的后续版本。12c代表云计算(Cloud Computing),这是Oracle在该版本中强调的一个关键概念。它具有多租户架构、数据库内存、安全增强、大数据管理和自动化管理等功能。它被广泛应用于企业级应用程序和大型数据…...

JS进阶——高级技巧

版权声明 本文章来源于B站上的某马课程,由本人整理,仅供学习交流使用。如涉及侵权问题,请立即与本人联系,本人将积极配合删除相关内容。感谢理解和支持,本人致力于维护原创作品的权益,共同营造一个尊重知识…...

TG-ADMIN 权限管理系统

项目简介 该项目是一款基于 SpringBoot + Vue2 + Jwt + ElementUi的 RBAC模型管理系统。 主要以自定义拦截器和jwt结合进行权限验证 通过自定义指令实现按钮级别权限,使用经典的RBAC模型 什么是RBAC? 1、RBAC模型概述 RBAC模型(Role-Based Access Control:基于角色的…...

十五届蓝桥杯第三期模拟赛题单(C++、java、Python)

备战2024年蓝桥杯 省赛第三期模拟赛题单 备战Python大学A组 第一题 【问题描述】 请问 2023 有多少个约数?即有多少个正整数,使得 2023 是这个正整数的整数倍。 【问题描述】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果…...

嵌入式驱动学习第一周——git的使用

前言 本文主要介绍git的使用,包括介绍git,gitee,以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程,未来预计四个月将高强度更新本专栏,喜欢的可以关注本博主并订阅本专栏&#xf…...

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…...

大语言模型LLM Pro+中Pro+(Prompting)的意义

—— Pro ,即Prompting,构造提示 1.LLM Pro中Pro(Prompting)的意义 Prompting不仅是大语言模型交互和调用的一种高效手段,而且已成为推动模型泛化能力和应用灵活性的关键技术路径,它不仅极大地拓展了模型功…...

React 中,children 属性

在 React 中,children 属性是一个特殊的属性,它允许你将组件作为其他组件的子元素传递。这意味着你可以在组件内部嵌套任何类型的子组件或元素,并且在父组件中通过 props.children 访问它们。这为组件的复用和组合提供了极大的灵活性。 以下…...

多行业万能预约门店小程序源码系统 支持多门店预约小程序 带完整的安装代码包以及搭建教程

随着消费者对于服务体验要求的不断提升,门店预约系统成为了许多行业提升服务质量、提高运营效率的重要工具。然而,市面上的预约系统往往功能单一,无法满足多行业、多场景的个性化需求。下面,小编集合了多年的行业经验和技术积累&a…...

Node.js 中 fs 模块文件操作的应用教程

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以让 JavaScript 代码在服务器端运行。在 Node.js 中,fs 模块是用来处理文件系统操作的模块。通过 fs 模块,我们可以进行文件的读取、写入、删除等操作。本教程将介绍如何在 No…...

一些常用到的git命令

git stash -a //缓存所有文件 git checkout -b dev origin/dev //切换到dev分支上,接着跟远程的origin地址上的dev分支关联起来 //推送本地分支到远程仓库 git push origin localbranchname:remotebrancname git revert onefile //https://www.freecodecamp.org/news/git-re…...

spring boot3解决跨域的几种方式

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途。 目录 1.前言 2.何为跨域 3.跨域问题出现特征 4.方式一:使用 CrossOrigin 注解 5.方式二:自定义…...

【Spring】19 @Autowired注解使用详解

文章目录 构造函数注入Setter方法注入字段注入数组和集合注入特殊情况处理特殊接口类型的注入异常处理结语 Spring 框架的 Autowired 注解是实现依赖注入的一种强大而灵活的方式。在本文中,我们将介绍 Autowired 注解的多种用法,包括构造函数、setter方法…...

Educational Codeforces Round 132 (Rated for Div. 2) E. XOR Tree(启发式合并+贪心)

题目 n(n<2e5)个点的树&#xff0c;点i权值ai&#xff08;1<ai<2^30&#xff09; 修改最少的点的权值&#xff0c;使得树上不存在异或和为0的简单路径&#xff0c;输出最少的点数 权值可以被修改成任意正整数&#xff08;可以是无限大&#xff09; 思路来源 官方…...

JavaScript 基本数据类型的详解

JavaScript的基本数据类型 以下都是JS内置的几种类型 数据类型描述number数字&#xff0c;不区分整数和小数string字符串类型booleantrue 真, false 假undefined表示未定义的值null只有唯一的值 null&#xff0c;表示空值 number 数字类型 JavaScript 中不区分整数和浮点数&…...

DDR5内存相比DDR4内存的优势和区别?选择哪一个服务器内存配置能避免丢包和延迟高?

根据幻兽帕鲁服务器的实际案例分析&#xff0c;选择合适的DDR4与DDR5内存大小以避免丢包和延迟高&#xff0c;需要考虑以下几个方面&#xff1a; 性能与延迟&#xff1a;DDR5内存相比DDR4在传输速率、带宽、工作电压等方面都有显著提升&#xff0c;但同时也伴随着更高的延迟。D…...

篮球游戏中的挑战精神与怄气心理:扣篮被帽后的再度冲击

在篮球比赛中&#xff0c;扣篮无疑是最具观赏性和震撼力的动作之一&#xff0c;它展示了球员的爆发力、技巧和自信。而在篮球游戏中&#xff0c;玩家即便面临连续扣篮被盖帽的挫折&#xff0c;仍渴望继续杀入内线尝试扣篮的现象&#xff0c;实则是体育竞技精神、挑战意识与怄气…...

Chrome扩展开发实战:利用manifest.json与service-worker实现侧边栏动态控制

1. 从零开始理解Chrome扩展侧边栏 第一次接触Chrome扩展开发时&#xff0c;我被manifest.json里密密麻麻的配置项搞得头晕眼花。直到做了几个实际项目才发现&#xff0c;其实掌握几个关键参数就能实现强大的功能。今天我们就来聊聊如何用manifest.json和service-worker这对黄金…...

AI代码审查工具集成趋势:从“降本”到“提质”的流程重构

摘要&#xff1a;将AI代码审查工具集成到现有流程&#xff0c;关键在于“流程重构”而非“工具替换”。通过精准集成、规则调优与反馈闭环&#xff0c;可实现缺陷率30%以上的系统性降低。趋势判断&#xff1a;AI审查正从“辅助检查”转向“质量内建”为什么许多团队引入AI代码审…...

不锈钢彩涂板哪个靠谱

最近好几个做工程的朋友跟我吐槽&#xff0c;说厂房屋顶的彩涂板用了不到三年就开始生锈、掉漆&#xff0c;维修成本比当初省的那点钱高多了。这让我想起去年帮一个化工厂选材的经历&#xff0c;当时对比了市面上好几家&#xff0c;最后才明白&#xff1a;选不锈钢彩涂板&#…...

应届生别装熟练!诚实反而更容易过

文章目录 一、那年我面了个"表演型选手"&#xff0c;场面一度十分尴尬二、别装了&#xff0c;面试官都是"人形测谎仪"三、"我不会&#xff0c;但我能快速学会"——这句话值多少钱&#xff1f;四、诚实面试的三大实操技巧&#xff0c;拿笔记一下4…...

从销售转行AI Agent:我是怎么做到的

就像十几年前移动互联网刚兴起的时候&#xff0c;那时候会搞安卓APP的人&#xff0c;哪怕学历不高&#xff0c;现在很多都成了大佬。 现在是AI Agent的黄金窗口期&#xff0c;需求大&#xff0c;但能踏踏实实干实事的人太少。 你要做的就是能成为那个能干活的人。 “钱景”是肯…...

从一次Maya动画丢失事故,聊聊动画系统底层连接与命名规范的重要性

从Maya动画数据丢失看数字资产管理的技术哲学 那天凌晨三点&#xff0c;动画师小李在项目截止前最后一次保存文件时&#xff0c;突然发现主角的所有关键帧动画消失了——控制器还在&#xff0c;但时间轴上精心调制的动作曲线全变成了冰冷的直线。这种噩梦般的场景&#xff0c;在…...

GitHub进阶玩法全解析,零基础可快速上手进阶高手,轻松解决各类常见难题下(补充版)

9. GitHub Pages与Webhooks&#xff1a;扩展你的能力边界9.1 GitHub Pages不只是静态网站是的&#xff0c;大家都知道它能托管静态网站。但高级用法包括&#xff1a;自定义域名和HTTPS&#xff1a;完全免费&#xff0c;在仓库设置里绑定自己的域名就行&#xff0c;GitHub会自动…...

UIStackView 实战:打造高效 iOS 界面布局

1. UIStackView 入门&#xff1a;为什么它是 iOS 开发者的秘密武器 第一次接触 UIStackView 是在 2014 年的 WWDC 大会上&#xff0c;当时苹果工程师演示这个"布局魔法"时&#xff0c;全场开发者都发出了惊叹声。这么多年过去&#xff0c;我依然记得那个瞬间——因为…...

VsionPro经典PatMax_Demo.idb图片分析

VsionPro自带数据集&#xff0c;位置&#xff1a;C:\Program Files\Cognex\VisionPro\Images&#xff08;默认位置&#xff09;PatMax_Demo.idb 是 VisionPro 最经典的高精度几何模板匹配教学案例&#xff0c;用一个复杂机械零件直观展示 PatMax 在旋转、缩放、遮挡、光照变化下…...

AudioSeal保姆级教程:从ffmpeg预处理到CUDA加速检测完整步骤

AudioSeal保姆级教程&#xff1a;从ffmpeg预处理到CUDA加速检测完整步骤 1. 项目概述 AudioSeal是Meta公司开源的一款专业级音频水印系统&#xff0c;专门用于AI生成音频的检测和溯源。这个工具就像给音频文件装上了一个"数字身份证"&#xff0c;无论音频被如何编辑…...