关于jpg文件格式的一个情景-第一篇
情景:我有两张扫描的图,得到的文件属性中,水平和垂直分辨率DPI的数据是错误的,我需要将其改正过来。

首先说点基础知识:JPEG的图像格式
原文地址:https://blog.csdn.net/QQ135102692/article/details/124828301
一般来说,大家都接受的文件格式都会有一定的组织标准,不然传输过程中的编码和解码就会很混乱。既然jpeg格式这么常见,必然有其优势,当然肯定也有大家权衡之下可以接受的不足。
按jpeg之前的标准,它是一种搞笑但有损(损失很小)的一种图像文件格式,它是一种很灵活的图片压缩方式,用户可以在压缩比和图片品质之间进行权衡。不过,通常来讲,其压缩比在10:1到40:1之间,压缩比越大,品质就越差,压缩比越小,品质就越好。

代码判断是否为jpg格式:
如上图,就是判断前面3个字节是什么,如果发现是FF D8 FF开始,那就认为它是JEPG图片。(注意android不是根据后缀名来判断是什么文件的,当然你必须是图片的后缀名文件管理器才可以打开)。
JPEG图片格式组成:
JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)
我们遇到的问题,需要关注的内容是:APP0图像识别信息
APP0(图像识别信息)
--------------------------------------------------------------------------
名称 字节数 值 说明
--------------------------------------------------------------------------
段标识 1 FF
段类型 1 E0
段长度 2 0010 如果有RGB缩略图就=16+3n
(以下为段内容)
交换格式 5 4A46494600 “JFIF”的ASCII码
主版本号 1
次版本号 1
密度单位 1 0=无单位;1=点数/英寸;2=点数/厘米
X像素密度 2 水平方向的密度
Y像素密度 2 垂直方向的密度
缩略图X像素 1 缩略图水平像素数目
缩略图Y像素 1 缩略图垂直像素数目
(如果“缩略图X像素”和“缩略图Y像素”的值均>0,那么才有下面的数据)
RGB缩略图 3×n n=缩略图像素总数=缩略图X像素×缩略图Y像素

多写一点:APP1 -------> APPN (N=1~15) 这个可能会有用
含义:应用程序保留标记x
标记码:0xFFE1~0xFF..(手机照片通常包含APP1,内容由地点,时间等)
解析APP0同上(我们这里使用JPEG没有APP0,略过)
其他有兴趣的,可以参考原文或者官网

浙公网安备 33010602011771号