根据Exif信息纠正图片方向

Android相机拍照方向旋转的解决方案:ExifInterface 一、 碰到的问题 写这篇文章的动机源自于这波迭代中碰到的一个问题: 在IM拍照时,在三星s7 eadge上拍完照片后从sd上拿到的地址设置给Imageview后显示时,图片旋转了90度。But我拍照的时候明明是竖着拍的,相册预览也是竖着的,为什么拿到图片后就成了横着的? 对比了另一台手机锤子坚果U1,没这个问题,因此怀疑是跟相机的机型相关。 想到的解决... 阅读详情
/ 工具函数:纠正图片方向并保存到新文件
fun correctImageOrientation(originalPath: String?,cachePath:File): String? {
    if(originalPath==null)return null
    // 读取原图的 Exif 方向
    val exif = ExifInterface(originalPath)
    val orientation = exif.getAttributeInt(
        ExifInterface.TAG_ORIENTATION,
        ExifInterface.ORIENTATION_UNDEFINED
    )
    // 计算旋转角度
    val rotationDegrees = when (orientation) {
        ExifInterface.ORIENTATION_ROTATE_90 -> 90f
        ExifInterface.ORIENTATION_ROTATE_180 -> 180f
        ExifInterface.ORIENTATION_ROTATE_270 -> 270f
        else -> 0f // 无需旋转
    }

    // 如果方向正常,直接返回原图路径
    if (rotationDegrees == 0f) return null

    // 创建临时文件保存旋转后的图片
    val tempFile = File.createTempFile("rotated_", ".jpg", cachePath)
    val rotatedBitmap = BitmapFactory.decodeFile(originalPath)
        ?: throw IOException("无法解码图片: $originalPath")

    // 旋转图片
    val matrix = Matrix().apply { postRotate(rotationDegrees) }
    val rotated = Bitmap.createBitmap(
        rotatedBitmap,
        0, 0,
        rotatedBitmap.width,
        rotatedBitmap.height,
        matrix,
        true
    )

    // 保存旋转后的图片,并重置 Exif 方向为正常
    FileOutputStream(tempFile).use { output ->
        rotated.compress(Bitmap.CompressFormat.JPEG, 100, output)
    }
    ExifInterface(tempFile.absolutePath).apply {
        setAttribute(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL.toString())
        saveAttributes()
    }

    // 回收 Bitmap 内存
    rotated.recycle()
    rotatedBitmap.recycle()

    return tempFile.absolutePath
}
iOS手机竖着拍的照片被旋转了90°的原因以及解决方案 我们来看第一行,值为1时,右边两列的值分别为:Row #0 is Top,Column #0 is Left side,其实很好理解,它表示照片的第一行位于顶端,而第一列位于左侧,那么这张照片自然就是以正常角度拍摄的。注意:对于上面的八种方向中,加了*的并不常见,因为它们代表的是镜像方向,如果不做任何的处理,不管相机以任何角度拍摄,都无法出现镜像的情况。其中,translate是平移变换,scale(-1,1)是向左翻转,rotate是顺时针旋转。(1)iOS手机横着拍的照片,照片方向显示正常。 阅读详情

相关推荐

Exif图片方向的一些发现

背景 首先,先要了解Exif是个什么东东,搬出百度百科 可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。 说到底Exif就是一种格式,用来存储图片的一些信息,这些信息和我们日常比较相关的有拍摄设备,拍摄地点,图片尺寸等,不过今天的主角是另外一个——那就是图片方向(or...

少年阿涛 4470

Android使用ExifInterface处理调用相机或调用相册后回调图片的旋转问题

在写一个有关调用相机和调用相册的demo的时候,发现回调的图片全是歪的...然后就上网查了查,发现有个ExifInterface可以解决此问题,遂开此一贴作个笔记

WindGrin_的博客 1993

直观理解图片的EXIF orientation

有些数据集会备注对图像做了如下处理: Auto-orientation of pixel data (with EXIF-orientation stripping)。 应该如何理解这个处理到底是做了什么呢? 什么是EXIF? EXIF用来规定除图片内容以外的附加详细信息的一种文件格式,比如图片的属性信息和拍摄数据。 称为可交换图像文件格式(英语:Exchangeable image f...

Do more, know more, be more. 1935

java识别图片中角的角度_java实现图片角度旋转并获得图片信息

本文实例为大家分享了java实现图片角度旋转并获得图片信息的具体代码,供大家参考,具体内容如下public class Demo {/*** 调整图片角度* make by dongxh 2017年11月1日下午3:51:08* @param src* @param angel* @return*/public static BufferedImage rotate(Image src, int ...

weixin_39969568的博客 576

Exif信息 处理图片上传时翻转问题

java处理旋转角度的图片 Java读取图片EXIF信息的方法: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image File的缩写,这是一种专门为数码相机照片设定的格式。这种格式可以用来记录数字照片的属性信息,例如相机的品牌及型号、相片的拍摄时间、拍摄时所设置 的光圈大小、快门速度、ISO等等信息。除此之外它还能够记录拍摄数据,以及照片格式化方式,这样就可以输出到兼容EXIF格式的外设上,例如照片打印机 等。 目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接

tuibian16的博客 892

java实现图片角度旋转并获得图片信息

主要为大家详细介绍了java实现图片角度旋转并获得图片信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Java 中压缩图片并应用 EXIF 旋转信息

压缩图片,图片旋转

weixin_48903815的博客 1261

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

如何使用Java获取上传图片需要旋转的角度且获取正确方向的图片

一、引言 在公司做项目的时候,发现ios端拍的图片会出现宽高不一致的情况,后来才发现其实是需要将其旋转才能获得正确的宽高,下面记录一下解决办法 二、 引入依赖 compile group: 'com.drewnoakes', name: 'metadata-extractor', version: '2.14.0' 三、编写工具类 package album; import com.drew.imaging.jpeg.JpegMetadataReader; import com.drew.metada

zmq000的博客 3683

VS2019+EasyX图形库实战:手把手教你用C语言打造消消乐小游戏(附完整源码)

本文详细介绍了如何使用VS2019和EasyX图形库从零开始构建一个C语言消消乐小游戏。通过环境配置、数据结构设计、界面绘制、交互实现到游戏逻辑完善的完整流程,帮助开发者掌握图形编程和游戏开发的核心技巧,并附有完整源码供参考。

bush的博客 186

Pytorch实现softmax多分类

PyTorch实现softmax多分类

天涯雨的博客 1389

php 识别翻转iphone拍摄的颠倒图片

用iphone横向拍摄并上传的图片往往是向左或向右90度侧向显示的 本文介绍如何用php识别并且翻转图片到正确位置 ps : 此方法只能判断一些手机相机拍摄的图片位置颠倒 // 首先用这个函数读取图片的一些头信息 // 原理就是在头信息中取出图片的位置信息 并且根据位置信息对图片做出调整 // 此函数只能处理jpeg 与 tiff 的图片格式 $exif = exif_read...

weixin_30877755的博客 260

小米路由器R1D进阶玩法:MIXBOX工具箱安装与插件管理指南

本文详细介绍了为小米路由器R1D安装MIXBOX工具箱的完整指南。通过开启SSH、执行一键安装脚本,用户可以轻松解锁路由器的进阶功能,如安装离线下载、内网穿透等插件,从而将旧设备转变为强大的家庭网络服务中心。

weixin_29292431的博客 1118

JS获取图片的EXIF信息+纠正图片方向

前端图片处理碰到的一个离奇 bug , 关于图片的 EXIF 信息,特地记录下来 。 然后使用一下代码可以获取Orientation信息,并纠正Orientation带来的图片旋转问题 // from http://stackoverflow.com/a/32490603 function getOrientation(file, callback) { var reader = new...

hnust_lec的博客 5009

JavaFX 概述

要从 JavaFX 中充分受益,了解 JavaFX 的设计方式以及对 JavaFX 包含的功能有一个很好的概述是很有用的。本文的目的是为您提供 JavaFX 概述。本文将首先介绍一般的 JavaFX 设计,然后介绍 JavaFX 中的各种特性。如果您熟悉 Flash/Flex,您会发现 JavaFX 在某种程度上受到了 Flash/Flex 的启发。JavaFX 中也有一些相同的想法。一般来说,JavaFX 应用程序包含一个或多个对应于窗口的阶段。每个阶段都有一个场景。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 408

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

获取图片Exif信息

  获取图片Exif信息 问题:手机照片上传时,会发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题;而Android不会出现这种现象。 原因:ios系统默认Orientation属性为1,与常规机器拍摄图片的Orientation属性不一致。 方案:读取文件Exif信息,获取Orientation属性,修改Orientation属性为0。 Orientation属性属性说明...

liuyinfei_java的博客 2278

华为OD机试真题 新系统 2026-07-22 Java&Go&C 实现【最小代价完成论文评审】

某校有 n 篇论文需要分配给教师评审。 每篇论文 i 可由 files[i] 对应的教师列表中任一教师评审。 每篇论文至少需要一名教师评审。 每位教师 t 不论被分配多少篇论文,其评审费用固定为 cost[t]。 请给出参与评审教师数量最少时的总费用。 如果存在多种方案满足教师数量最少,则选择总费用最小的方案。

MISAYAONE的博客 153

js获取图片的EXIF,解决图片旋转问题

相信大家在做项目的时候会遇到在canvas里加入图片时,图片发生90°,180°的旋转。当时的你肯定时懵逼的,为毛。 其实这就是图片的EXIF搞的鬼。 什么是EXIF 简单来说,Exif 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,它就好像是傻瓜相机的日期打印功能一样,只不过 Exif信息所记录的资讯更为详尽和完备。Exif 所记录的元数据信息非常丰富,主

Dream_fengyuefei的博客 1508

真正的工业级环形缓冲区(Circular Buffer)完整实现细节

永远不要永远不要ToArray()或AddRange()永远返回或两段Span永远用_head_tail% Capacity实现环形照着上面这套代码改,你的系统将彻底告别内存爆炸,从“实验室玩具”变成“产线战神”!需要我给你一个支持两段绘制的完整实现吗?

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 127

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python调整图片大小不覆盖exif_Python3 使用pli优化图片大小,相机或手机拍图片根据exif旋转、纠正方向-阿里云开发者社区...

首先安装pip install pillow如果报错,请根据报错的信息去搜索一下,一般都能得到解决,未找到请升级pippython -m pip install --upgrade pip或者pip install --upgrade pip那么写个方法from PIL import Image,ExifTags#定义保存图片都路径def get_outfile(infile, outfile):...

weixin_39873325的博客 365

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android 笔记 exif信息 uri信息

exif信息在解析并显示图像的时候,会需要orientation数据,来得到图片的旋转角度,如果显示的时候不设置角度,那么有orientation信息的图片就方向不对。orientation在exif信息中,exif是保存在图片中的一系列拍摄信息 有可能不同厂家在里面保存的信息多少有点区别,但是有些公用的信息都有,比如光圈,快门,拍摄模式,白平衡,或者还有一些版权信息等等。手机保存的jpeg文件里

super_zq的博客 752

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

输入图片旋转问题?EXIF信息处理部署方案

本文介绍了如何在星图GPU平台上自动化部署unet person image cartoon compound人像卡通化 构建by科哥镜像,实现真人照片的智能卡通风格转换。该镜像内置EXIF自动校正机制,可精准处理手机等设备拍摄图片的方向异常问题,广泛应用于头像定制、社交素材生成等典型场景。

weixin_35935514的博客 926

html中图片旋转_图片自动旋转纠正

“上传时,图片发生了自动旋转/翻转,与本地显示的图片方向不一致。实际上,部分 jpg 图片属于 EXIF (可交换的图像文件格式)。EXIF 中包含一个 Orientation 参数,用来记录拍摄照片时的方向。在使用PS或者其他软件旋转图片时,图片旋转了,但 Orientation 不会改变,由于我们使用的图片预览器能够预处理图片,使其看起来与旋转后一致,但上传图片时,浏览器并不会预处...

weixin_39660922的博客 1789

玩转图片元数据:EXIF与AI旋转判断的完美结合

本文介绍了基于星图GPU平台,自动化部署PaddleOCR镜像,实现图片方向智能校正的解决方案。该平台支持GPU加速,可高效运行融合EXIF元数据解析与AI旋转判断的处理流程。典型应用场景包括云相册自动整理、扫描文档标准化及电商图片预处理,显著提升图像处理的准确率与自动化水平。

JetFalcon67的博客 1152

Java 纠正上传图片自动旋转与镜像的问题

遇到一个图片看着是方向是正的,但是用特定的工具打开后自动旋转与镜像。。为什么我们在一些软件上,或者浏览器中看到是正的,是因为这些软件,浏览器自动的纠正了这个图片。然而我们的Java并没有自动的为我们去纠正这个图片当我们使用去绘制图片的时候发现高与居然是相反的。

假女吖的博客 1906
上一篇: 上传文件worker
下一篇: 关于viewpager常见的泄漏
lynn8570_blog
博客等级 码龄10年 254粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值