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

图像的EXIF方向信息(Orientation标签)

问题:

发现用代码处理有些图像(比如苹果手机拍的照片)时,代码里获取的宽和高是反过来的,为什么?

原因(by通义等ai):

iPhone 等设备拍摄的照片会嵌入 EXIF (Exchangeable Image File Format) 元数据,这些信息记录了照片的拍摄设备、时间、参数等,其中包含 Orientation 标签,指示照片的实际旋转角度,例如:
1:正常(0度)
3:旋转 180 度
6:旋转 90 度(顺时针)
8:旋转 270 度(顺时针,或 90 度逆时针)
大多数现代设备(如手机、电脑)在显示图片时会自动根据 EXIF 的旋转标记来调整图片的方向,因此用户看到的是“正确”的图片。
然而,当通过编程方式读取图片尺寸(如使用 BufferedImage.getWidth() 和 BufferedImage.getHeight())时,默认情况下只返回图片的原始尺寸,而不考虑旋转标记。

解决方案

为了正确获取图片的实际宽度和高度,需要处理 EXIF 旋转标记。
可以使用metadata-extractor,这是一个轻量级且易于使用的库,专门用于解析图像元数据:

Maven依赖:

<dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.18.0</version>
</dependency>

读取 EXIF 的 Orientation:

import com.drew.imaging.ImageMetadataReader;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;import java.io.File;@Slf4j
public class ImageTest {@Testvoid test0() {try {File imageFile = new File("C:\\Users\\25128\\Desktop\\90.JPG");Metadata metadata = ImageMetadataReader.readMetadata(imageFile);// 尝试从 EXIF 中读取 OrientationExifIFD0Directory directory = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);if (directory != null && directory.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {int orientation = directory.getInt(ExifIFD0Directory.TAG_ORIENTATION);System.out.println("Orientation: " + orientation);} else {System.out.println("No EXIF Orientation tag found.");}} catch (Exception e) {e.printStackTrace();}}}

运行结果:Orientation: 8

http://www.xdnf.cn/news/5791.html

相关文章:

  • MySQL 备份与恢复
  • 45、跳跃游戏Ⅱ
  • JavaScript双问号操作符(??)详解,解决使用 || 时因类型转换带来的问题
  • 消息队列RocketMQ-docker部署保姆级教程(从0到1)(2)
  • 16.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines_indexed
  • apt 软件源与 Docker 镜像源
  • Westlake-Omni 情感端音频生成式输出模型
  • 软考高分备考秘籍:综合知识、案例分析、论文全攻略
  • 如何使用VBA宏高效操作Word文档中的表格(对齐与样式)
  • 六、STM32 HAL库回调机制详解:从设计原理到实战应用
  • nginx-整合modsecurity做waf
  • Ubuntu 22初始配置(root、ssh)
  • 航电系统之电传飞行控制系统篇
  • IDR方程迭代求解算法介绍与比较
  • Ollama+OpenWebUI+docker完整版部署,附带软件下载链接,配置+中文汉化+docker源,适合内网部署,可以局域网使用
  • Java 线程的堆栈跟踪信息
  • 《Python星球日记》 第62天:图像方向综合项目(猫狗分类)
  • Java自动化测试
  • 2025年5月13日 奇门遁甲与股市
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.3)
  • 麒麟 v10 卸载podman
  • 【大模型MCP协议】MCP官方文档(Model Context Protocol)一、开始——1. 介绍
  • pythonocc 拉伸特征
  • C语言 第六章 结构体(3)
  • 0前言(文章体系)
  • 数字滤波器应用介绍
  • 流体力学绪论(期末复习)
  • 【android bluetooth 框架分析 02】【Module详解 13】【CounterMetrics 模块介绍】
  • 继承关系下创建对象的具体流程
  • 生活破破烂烂,AI 缝缝补补(附提示词)