将元数据(Exif)添加到base64

3
我正在尝试在上传之前通过客户端减小图像大小,以保留用户的带宽和服务器存储空间,同时保留有关原始拍摄的信息。
当前的处理流程为: 文件读取器 -> 画布(drawImage) -> base64 -> XMLHttpRequest(获取进度) -> php服务器 这种技术的一个缺点是丢失元数据(Exif),如日期和时间、位置、方向等。
可以通过Exif JS或其他库提取Exif数据。但我没有找到如何将这些信息放入减小后的文件(在canvas对象、base64 url或php端)中的方法。
您有什么想法或建议吗?
1个回答

4
没有简单的方法可以做到这一点。Canvas只能保存JPEG文件, 然后根据你选择的方法将其编码为Data-URL或Blob,而且只有最基本的块。从浏览器端来看,没有机制可以插入自定义或附加的块到文件格式中。
要恢复EXIF信息,您需要执行以下操作:
  • 将Data-URI解码或将Blob转换为ArrayBuffer
  • 手动解析缓冲区以映射标记
  • 创建一个足够大的新缓冲区来容纳生成的JPEG文件和EXIF数据
  • 插入EXIF数据
  • 根据文件格式附加图像数据等
现在,您可以将其包装为Blob对象或将其转换回Data-URL。虽然这是可能的,但并不直接。需要使用文件格式规范
在这种情况下,一个可选且更好的方法是提取EXIF块,将其格式化为JSON对象,并将其作为元数据发送到服务器。您只需要让服务器端“知道”它需要考虑所接收到的图像的元数据即可。

谢谢,我可能会提取Exif数据,将它们附加到我的查询中并将信息存储在数据库中。不幸的是,客户端中没有此功能... - cocoto
哎呀,我本来想描述JPEG格式的,但由于最近太多PNG解码的缘故,我却用了PNG格式。不过原理还是一样的。是啊,这让事情变得有点棘手。 - user1693593

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接