JPEG附加信息

关于JPEG压缩中附加信息的事

再复习一下JPEG元数据的概念:图片元数据(metadata)是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。
常见的几种标准有:

EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息。

IPTC:比如图片标题、关键字、说明、作者、版权等信息。

XMP:由Adobe公司制定标准,以XML格式保存。用PhotoShop等Adobe公司的软件制作的图片通常会携带这种信息

XMPExif可以共用JPEG编码格式中APP1的标签位,因此要用"EXIF"和"XMP"标识符作为区分。

因此前文所写的将XMP写入APP4的方法是不对的,会导致无法重新读取到XMP元数据。

使用MagicExif软件可以方便的查看JPEG中的信息。
在这里插入图片描述


/* Write the JPEG marker header (APP1 code and marker length) */
jpeg_write_m_header(cinfo, JPEG_APP0 + 1,
                    (unsigned int)(length + 9));

/* Write the marker identifying string "XMP" (null-terminated).  We
 * code it in this less-than-transparent way so that the code works even if
 * the local character set is not ASCII.
 */
jpeg_write_m_byte(cinfo, 0x58);
jpeg_write_m_byte(cinfo, 0x4d);
jpeg_write_m_byte(cinfo, 0x50);
jpeg_write_m_byte(cinfo, 0x0);

/* Add the sequencing info */
jpeg_write_m_byte(cinfo, cur_marker);
jpeg_write_m_byte(cinfo, (int)num_markers);

APPn部分可以写入的最大数据是64KB,因此XMP如果写入了GDepth数据很容易超过APPn的大小限制。在这里参考高通的DebugData写入JPEG方式,已知DebugData的大小也是大于64KB,采用的是每一次都只写入64KB大小的数据(包含TAG),剩下的数据再按照相同的逻辑写入。具体实现在函数EmitAppN()中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TApVI7Z8-1639108045022)(DocPic/image-20211207140735245.png)]

header的长度要和定义的“XMP”字符串的长度相同才行,不然会导致jpeg写不成功。

    jpeg_write_m_header(cinfo, JPEG_APP0 + 3,
                        (unsigned int)(length + 4))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值