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

验证图片旋转

最近在使用百度图片翻译时遇到一个问题,就是图片会翻转90,经与百度沟通,发现是原始图片中有个旋转参数引起的。
于是写个demo验证一下。

// 获取元数据中的旋转方向
func getOrientation() int {//打开图像文件f, err := os.Open("image.jpg")if err != nil {log.Fatal(err)}defer f.Close()// 解码 EXIF 元数据x, err := exif.Decode(f)if err != nil {if err.Error() == "EOF" {return 0}log.Fatal(err)}// 获取图片方向orientation, err := x.Get(exif.Orientation)if err != nil {log.Fatalf("failed to get orientation: %v", err)}// 打印方向信息fmt.Println("Orientation:", orientation)// 根据 EXIF 方向信息获取旋转角度// 1: 正常(0°)// 3: 180°// 6: 90° 顺时针// 8: 270° 顺时针rotateDegrees := map[int]int{1: 0,3: 180,6: 90,8: 270,}value, err := orientation.Int(0)if err != nil {log.Fatalf("failed to parse orientation value: %v", err)}fmt.Printf("Rotate degrees: %d\n", rotateDegrees[value])return rotateDegrees[value]
}
// 直接旋转图片
func setRotate(angle int) {// 打开源图像文件startTime := time.Now()srcImage, err := imaging.Open("image-out.jpg")if err != nil {log.Fatalf("failed to open image: %v", err)}fmt.Println(angle)rotatedImage := imaging.Rotate(srcImage, float64(angle), image.Transparent)// 保存旋转后的图像err = imaging.Save(rotatedImage, "rotated_image.jpg")if err != nil {log.Fatalf("failed to save image: %v", err)}log.Println("Image rotated and saved to rotated_image.jpg", time.Since(startTime).Milliseconds())}

相关文章:

验证图片旋转

最近在使用百度图片翻译时遇到一个问题,就是图片会翻转90,经与百度沟通,发现是原始图片中有个旋转参数引起的。 于是写个demo验证一下。 // 获取元数据中的旋转方向 func getOrientation() int {//打开图像文件f, err : os.Open("image…...

宏景eHR /ajax/ajaxService SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /ajax/ajaxService 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_cmdshell可…...

从源码看 Redis:深入理解 redisDb 和 redisObject

Redis 是一个广泛使用的内存数据库,以其高性能和丰富的数据结构而闻名。不同于磁盘数据库,磁盘数据库将数据读取到文件中维护,而内存数据库将数据存储在内存中,意味着其想要维护数据,必须在代码中维护一个保存数据的结…...

unity中实现流光效果——世界空间下

Properties{_MainTex ("Texture", 2D) "white" {}_FlowColor ("Flow Color", Color) (1, 1, 1, 1) // 流光颜色_FlowFrequency ("Flow Frequency", Float) 1.0 // 流光频率_FlowSpeed ("Flow Speed", Float) 1.0 // 流光…...

项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了

最近我们在做一个生态化养殖的项目时,发现一个奇怪的现象: 项目现场由于没有有线网络,所以,我们在现场IPC接入到海康NVR之后,再通过一款4G的CPE接入到天翼云的国标GB28181视频平台;我们采用UDP协议播放NVR…...

【RabbitMQ】RabbitMQ不公平分发_预取值

一、不公平分发 1、简介 RabbitMQ中的不公平分发(Unfair Dispatch)是指当多个消费者(Consumers)同时订阅同一个队列(Queue)时,消息的分发机制并非严格平均或公平,而是基于某些条件…...

最新AI模型使用指南和模型

市面上最好的AI大模型 OpenAI GPT-4: 概述:GPT-4 是 OpenAI 发布的最新一代大型语言模型,具备更强的理解和生成自然语言的能力。特点: 强大的文本生成和理解能力。支持多语言处理。可用于各种应用场景,如对话生成、内容…...

数据结构之八大基本排序方法

在数据结构中,排序是一个重要的操作,它有助于提高数据的可读性和可操作性。排序算法有多种,各有优缺点,适用于不同的场景。以下是八大经典排序算法的介绍: 1. 冒泡排序(Bubble Sort) 原理&…...

《Milvus Cloud向量数据库指南》——什么是高可用:深入理解数据库系统中的高可用性架构

什么是高可用:深入理解数据库系统中的高可用性架构 在信息技术日新月异的今天,高可用性(High Availability,简称HA)已成为衡量一个系统,尤其是数据库系统稳定性和可靠性的重要标准。高可用性的核心目标在于确保系统能够持续不断地提供服务,最大限度地减少因维护活动、硬…...

C++ | Leetcode C++题解之第319题灯泡开关

题目: 题解: class Solution { public:int bulbSwitch(int n) {return sqrt(n 0.5);} };...

C# 使用 NLog 输出日志到文件夹

在项目中使用 NuGet 安装 NLog 包以及 NLog.Config 包 配置 nlog.config 在项目的根目录下创建一个 Nlog.config 文件&#xff08;如果还没有&#xff09;&#xff0c;然后添加如下配置&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <…...

node.js使用NodeMachineID 生成唯一UUID和注意事项

node-machine-id用于获取或生成唯一的机器ID 如何使用 const { machineId, machineIdSync } require(node-machine-id) JSON.stringify(machineIdSync({original: true})) ;方法&#xff1a; machineIdSync 此函数同步获取操作系统本机UUID/GUID&#xff0c;默认情况下进行哈…...

AI大模型在数据治理中的应用

目前&#xff0c;企业的数据治理工作以人工实施为主&#xff0c;其中一些重复性较强的工作&#xff0c;如&#xff1a;数据标准制定和映射、元数据信息完善、数据目录挂载等&#xff0c;需要消耗大量的人力和时间成本&#xff0c;这给本来就难以量化业务价值的治理工作的顺利推…...

【初学人工智能原理】【12】循环:序列依赖问题

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 代码及工具箱 本专栏的代码和工具函数已经上传到GitHub&#xff1a;1571859588/xiaobai_AI: 零基础入门人工智能 (github.com)&#xff0c;可以找到对应课程的代码 正文 对于…...

【QT】无法打开QT的ui文件,出现闪退情况

打开qt的ui文件出现闪退的情况&#xff1a; 解决办法&#xff1a;点击扩展-Qt VS Tools-Options 找到Qt General中的Qt Designer 的Run in detached window改为True。...

三、Spring-WebFlux实战案例-流式

目录 一、springboot之间通讯方式 1. 服务端 (Spring Boot) 1.1 添加依赖 1.2 控制器 2. 客户端 (WebClient) 2.1 添加依赖 2.2 客户端代码 3. 运行 二、web与服务之间通讯方式 1、服务端代码 2、客户端代码 3、注意事项 三、移动端与服务端之间通讯方式…...

html+css 实现hover双层按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…...

SPIFFS与LittleFS的对gz文件格式的区别

SPIFFS 只能安装在Arduino上。LittleFS支持Arduino IDE和VScode的 PlatformIO。 SPIFFS serveStatic: server.serveStatic("/", SPIFFS, "/") 负责提供 SPIFFS 文件系统中的文件。您可以在 SPIFFS 上放置 .gz 文件&#xff0c;并该方法将自动处理它们。 …...

STM32L051K8U6-开发资料

STM32L051测试 &#xff08;四、Flash和EEPROM的读写&#xff09;-云社区-华为云 (huaweicloud.com) STM32L051测试 &#xff08;四、Flash和EEPROM的读写&#xff09; - 掘金 (juejin.cn) STM32L0 系列 EEPROM 读写&#xff0c;程序卡死&#xff1f;_stm32l0片内eeprom_stm3…...

Markdown语法学习

Markdown学习 一、基础语法讲解 1. 换行 本行末尾双空格然后回车&#xff08;在Typora的中直接回车也可以&#xff09; 2. 换段 本段末尾两次回车 3. 加粗 **加粗** __加粗__效果&#xff1a;加粗 4. 斜体 *加粗* _加粗_效果&#xff1a;斜体 5. 斜体加粗 ***加粗**…...

拉罗替尼Larotrectinib常见副作用ALT升高及疲劳如何有效应对【海得康】

在拉罗替尼&#xff08;Larotrectinib&#xff09;治疗NTRK融合阳性实体瘤的临床实践中&#xff0c;ALT升高与疲劳堪称两大最具代表性的不良反应。前者直指肝脏安全底线&#xff0c;后者则如影随形地侵蚀着患者的日常功能与生活质量。根据FDA批准的处方信息、三项关键临床试验&…...

hcom:基于钩子架构的AI编码代理本地编排系统

1. 项目概述&#xff1a;hcom&#xff0c;一个为AI编码代理打造的“中枢神经系统”如果你和我一样&#xff0c;日常开发中重度依赖像Claude Code、Gemini CLI这类AI编码助手&#xff0c;那你肯定遇到过这样的场景&#xff1a;你让Claude在终端A里重构一个模块&#xff0c;同时让…...

用ChatGPT API赋能Excel:VBA宏实现自然语言数据处理

1. 项目概述&#xff1a;当Excel遇上ChatGPT 如果你和我一样&#xff0c;每天都要和Excel打交道&#xff0c;处理数据、写公式、做报表&#xff0c;那你肯定也幻想过&#xff1a;要是Excel能自己“思考”&#xff0c;能理解我的意图&#xff0c;帮我写公式、分析数据甚至生成报…...

书匠策AI(http://www.shujiangce.com)期刊论文功能全拆解

哈喽&#xff0c;我是那个专门帮你把论文写作这件事"翻译成人话"的博主。 今天不画饼&#xff0c;不喊口号&#xff0c;就干一件事——把书匠策AI&#xff08; 官网直达&#xff1a;www.shujiangce.com微信搜一搜"书匠策AI"直达&#xff09;里的期刊论文功…...

社会工程学驱动的域名劫持攻击机理与防御体系研究 —— 以 CoW DAO 事件为例

摘要 2026 年 4 月 14 日&#xff0c;去中心化交易服务平台 CoW DAO 的官方域名 cow.fi 遭遇社会工程学攻击&#xff0c;攻击者通过入侵.fi 域名注册商流程、伪造身份材料并劫持 DNS 解析&#xff0c;将用户流量导向伪造钓鱼页面&#xff0c;诱导钱包签名导致资产损失约 120 万…...

JumpServer堡垒机源码部署避坑实录:从MySQL权限到Node版本,我踩过的那些坑

JumpServer堡垒机源码部署避坑实录&#xff1a;从MySQL权限到Node版本&#xff0c;我踩过的那些坑 部署开源堡垒机JumpServer时&#xff0c;看似简单的make install背后藏着无数技术暗礁。去年我们团队在金融级内网环境部署JumpServer时&#xff0c;经历了从数据库权限锁死到前…...

跨境电商AI Agent技术拆解:从RPA到智能体,店铺自动化运营的架构与实践

当大模型“驱动”RPA&#xff0c;跨境电商运营正在从“脚本自动化”迈向“意图驱动”的数字员工时代 写在前面 跨境电商卖家每天面对多平台&#xff08;Amazon、eBay、TikTok、Temu、Shopee等&#xff09;、多店铺、多站点&#xff0c;运营工作高度重复&#xff1a;采集竞品数…...

避坑!Altium Designer 21.6 这几个Preference设置千万别乱动(附最佳实践)

Altium Designer 21.6 关键Preference设置避坑指南与高效配置策略 在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;Altium Designer作为行业标杆工具&#xff0c;其强大的功能背后隐藏着诸多可能影响工作效率的"设置陷阱"。本文将从实际工程经验出发&…...

LLM在硬件断言生成中的应用与优化

1. 硬件断言生成的技术背景与挑战硬件设计验证是芯片开发流程中至关重要的环节&#xff0c;而断言&#xff08;Assertion&#xff09;作为验证的核心工具&#xff0c;其质量直接影响着验证的效率和可靠性。断言本质上是对设计预期行为的数学编码&#xff0c;用于在仿真或形式验…...

LinkedIn Liger Kernel:移动设备内核定制与性能优化实战

1. 项目概述&#xff1a;一个面向移动设备的开源内核探索如果你在移动设备开发、嵌入式系统或者内核研究的圈子里待过一段时间&#xff0c;大概率听说过或者接触过“Liger Kernel”这个名字。它不是一个商业产品&#xff0c;而是一个在GitHub上由LinkedIn开源并维护的Android内…...