`

关于图片文件旋转JPEG与EXIF信息

    博客分类:
  • Java
阅读更多
关于图片文件旋转JPEG与EXIF信息

比如某相机拍摄出来的相片,文件分辨率比如宽度7360像素,高度4912像素

十进制表示为 DEC : 7360 * 4912
十六进制则为 HEX : 1CC0 * 1330

默认情况下,会在00000030:07标志位(不同设备或程序生成的图片的标志位会有所不同,由EXIF内容而定)上存放01值表示原始文件的位置,无论这张图是横着拍的还是坚着拍的,初始值为01
那么图片,在Windows 10操作系统下,通过操作系统自带的“相片”程序进行旋转时,仅仅对此标志位进行改变,而图片的内容不会做任何改变,包括旋转后的宽度与高度也不会做改变,包括JPEG和EXIF中的宽度与高度信息。

1、向右旋转90度,标志位为06
2、再向右旋转90度,即旋转了180度,标志位为03
3、再向右旋转90度,即旋转了270度,标志位为08
4、再向右旋转90度,即旋转了360度,回到原图,标志位还原为01

然而,在Windows 10进行旋转的图片,如果在Windows XP或Windows 7上面通过“相片”进行查看仍然显示为未旋转前的图片,因为不识别这个标志位。
资源管理器在显示分辨率那一栏中也自然是无法识别,低版本的程序无法识别高版本的标志位导致的问题。

于是,在处理旋转过后的图片,通过JDK 8.0版本去读取javax.imageio.ImageIO.read(new File(fileName)).getWidth/getHeight宽度和高度时,也是无法获知到底是不是旋转过的。

包括其他比如HypeSnap 5.6.0版本的一些旧程序,在打开时都会由于不支持这种方式而导致仍是未旋转的问题。


但是,如果是在Windows XP或Windows 7当中,对图片文件进行旋转时,文件的内容做了全面的变化。旋转后的宽度与高度也会改变并保存到EXIF中,图片内容的改变。这样旋转后的文件在其他操作系统上进行打开时都是正确的旋转后的结果。


解法:比如新版本的HypeSnap 8.16.17版本已经可以支持这个特殊的标志位,能够正确识别并展现。

试过JDK 8.0/9.0/10.0均无法识别,目前最新版本的OpenJDK 13.0版本也没能识别出来旋转后的分辨率。

关于JPEG/EXIF文件格式说明
https://www.media.mit.edu/pia/Research/deepview/exif.html
Description of Exif file format

0x0112 Orientation unsigned short 1 The orientation of the camera relative to the scene, when the image was captured. The start point of stored data is, '1' means upper left, '3' lower right, '6' upper right, '8' lower left, '9' undefined.

看规范文件的时间:
rev. 1.1 Dec.19,1999
rev. 1.0 May.28,1999
这是大家都偷懒么?
分享到:
评论

相关推荐

    修改图片exif信息示例(使用MediaUtil)

    ### 修改图片EXIF信息示例(使用MediaUtil) #### 一、引言 在数字图像处理领域,EXIF(Exchangeable Image File Format)是一种标准格式,用于存储图像文件中的元数据,包括拍摄时间、相机型号、光圈值、快门速度...

    jpeg-autorotate, 在EXIF方向,一个 node 模块旋转JPEG图像基于.zip

    jpeg-autorotate, 在EXIF方向,一个 node 模块旋转JPEG图像基于 基于EXIF方向旋转JPEG图像的node 模块。:它做什么?安装工具使用情况node 模块示例用法信息错误句柄选项变更日志文件许可协议片尾它做什么?这里模块...

    linux下jpeg图片Exif标识.docx

    1. **图像旋转**:根据Exif中的"Orientation"标签,可以自动修正因设备方向导致的图片旋转问题。 2. **用户隐私保护**:在上传图片前移除Exif数据中的GPS位置信息,防止暴露用户的隐私。 3. **图像筛选和分类**:...

    处理图像的exif中的orientation信息

    针对这个问题,我们需要在读取图像后,根据EXIF中的orientation信息对图像进行相应的旋转操作。下面是一个可能的处理流程: 1. **读取EXIF信息**:首先,我们需要一个库来解析图像的EXIF数据,如Python的`PIL`...

    解析图片exif信息

    图片的EXIF(Exchangeable Image File Format)信息是其中的一个关键概念,它包含了关于照片的各种元数据,如拍摄时间、相机型号、曝光参数、GPS位置等。在苹果设备上拍摄的照片尤其值得注意,因为它们的EXIF信息中...

    图片无损旋转工具JPEG Lossless Rotator中文版.rar

    JPEG Lossless Rotator是一款免费的图片旋转工具,它的优点在于旋转指定的图片而不会损失图片质量,即无损旋转转自。虽然使用WINDOWS自带的图片浏览器也可以旋转图片,但是使用它旋转后保存的图片质量会有损失,...

    解决ios拍照上传图片被旋转

    这段代码会读取输入文件的图片,检查Exif信息并进行必要的旋转,然后将修正后的图片保存到输出文件。请注意,这个示例仅处理JPEG格式的图片,对于其他格式,可能需要使用不同的方法。 总结来说,解决iOS拍照上传...

    实现JPEG图像旋转180度并保存

    2. JPEG图像的元数据(如EXIF信息)通常包含原始拍摄方向,旋转后可能需要更新这些信息。 3. 考虑到性能,对于大型图像,可能需要分块处理或使用更高效的算法。 总结来说,实现JPEG图像180度旋转并保存涉及理解JPEG...

    Andriod下读取图片Exif信息Demo

    Exif(Exchangeable Image File Format)是一种扩展的JPEG格式,用于存储与图像相关的信息,如拍摄日期、时间、地理位置、相机型号、曝光参数等。在本教程中,我们将深入探讨如何在Android应用程序中读取和使用这些...

    一个直接用命令查看修改删除图片属性Exif信息的文件

    修改文件的jpeg文件头部分备注(此备注并非exif信息)。该指令会打开文本编辑器,并在编辑器关闭时将备注信息存入文件。 -cs <文本文件> 导出备注。例如"jhead –cs D:\988.txt D:\A.jpg" -ci <文本文件> 导入备注。...

    java 图片压缩 iphone拍照上传旋转问题处理压缩工具类

    接下来,我们创建一个名为`ImageUtils`的工具类,用于处理图片旋转和压缩: ```java import org.apache.commons.imaging.ImageReadException; import org.apache.commons.imaging.ImageWriteException; import org....

    WPF 通过 EXIF 设置和读取图片的旋转信息.rar

    这个压缩包文件“WPF 通过 EXIF 设置和读取图片的旋转信息.rar”显然是一个关于如何利用WPF处理图像旋转问题的学习资源。EXIF(Exchangeable Image File Format)是一种用于存储图像文件的元数据的格式,其中包含了...

    读取jpg exif信息

    Exif(Exchangeable Image File Format)是嵌入在JPEG、TIFF等图像文件中的元数据标准,用于存储拍摄照片时的设备信息、拍摄参数以及地理位置等丰富数据。它为摄影师和后期处理人员提供了宝贵的元数据,帮助理解图像...

    完整版图片的旋转与翻转.rar

    在这个“完整版图片的旋转与翻转.rar”压缩包中,很可能是包含了一些关于如何进行这些操作的教程、软件工具或示例文件。以下是对这个主题的详细讲解: 1. 图片旋转: - 90度旋转:最常见的旋转角度,通常用于使竖...

    jpeg格式图片的读取和显示

    JPEG文件通常包含图像数据、颜色空间信息、分辨率信息以及元数据,如EXIF信息等。 在编程中,我们通常会使用库或者API来处理JPEG文件。例如,在Python中,我们可以利用PIL(Python Imaging Library)或其更新版本...

    国内人做的查看图片EXIF标准库

    在图像处理程序中,可以通过EXIF数据调整图片的显示方式,如根据相机的旋转信息自动校正图片方向;或者在隐私保护的应用中,可以删除敏感的EXIF信息,防止位置或其他个人信息泄露。 总的来说,这个国内开发的.NET ...

    exif 的 C++ 读取类exif 的 C++ 读取类

    通过上述步骤,我们可以创建一个C++类,读取并解析数码照片中的EXIF信息,从而获取到关于照片的丰富元数据。这在图像处理、数据分析或开发摄影相关的应用程序时非常有用。当然,实际应用中还需要考虑性能优化、错误...

    html5+exif+canvas照片上传压缩旋转

    通过`createImageBitmap()`方法加载图片,然后在Canvas上进行绘制,我们可以根据EXIF中的旋转信息应用适当的旋转操作。Canvas提供了一个`rotate()`方法,用于在坐标系上指定角度的旋转。旋转后的图像可以再次导出为...

Global site tag (gtag.js) - Google Analytics