背景
我正在备份我的数码照片,发现有些照片从我的相机导入了两次,保存在两个不同的文件夹中。这不是问题所在。
问题是,我在比较文件大小时发现一些重复文件较小(4.6MB vs 5MB)。我注意到较小的文件Microsoft Photo Viewer
在 Exif 数据的“程序名称”字段中,而较大的文件在该字段中则包含我的相机型号。此外,高度和宽度尺寸已交换(图像已旋转)。
问题
为什么我的照片会被处理?
文件大小的差异是否表明我在操作过程中损失了一些图像质量?
- 或者 Windows 是否可能使用比我的相机更高效的 JPEG 压缩算法?(假设它们都使用最低级别的 JPEG 压缩)
- 或者照片的方向是否存在导致 JPEG 压缩方式不同的问题?
答案1
Windows 在旋转照片时会添加两个标签:Software (Exif) 和 CreatorTool (Exif)。不过,它在 Windows 资源管理器中显示为一个。
为什么会被操纵?可能是 Windows 根据相机的旋转标签来旋转照片。
照片可以以两种方式无损旋转(也许还有更多?)。一种是 Exif 旋转标签。它只是图像浏览器的数据,应该显示旋转后的图像。第二种是操纵图像数据(“真实”旋转),但不丢失数据*。如果您看到两张照片都旋转了,则意味着一张有 Exif 旋转标签,第二张实际上是由 Windows 旋转的。如果您的图像浏览器支持 Exif 旋转标签,您会看到两张照片相同。
为什么尺寸变了?没有文件很难说。我会说是缩略图。有些相机会为 JPEG 文件添加非常大的缩略图,而 Windows 会将其删除或更改为自己的。在这种情况下,照片不会被触及,但元数据会被触及 - 确切地说是“照片中的照片”。您可以查看 exiftool 信息 ( exiftool filename.jpg
) 并比较元数据是否已更改。特别查看有关二进制数据的信息。或者您可以将两个文件(旋转文件和原始文件)发送到这里,我会检查一下。
JPEG 压缩 - 我怀疑 Windows 是否会重新压缩您的 JPEG。在这种情况下,它可能只执行无损操作,因此只有元数据会更改。
我建议您自己获取照片,不要使用任何工具 - 也不要使用 Windows 或相机生产商的工具。
顺便说一句,如果您愿意,您可以删除这些标签(命令从当前目录开始对所有带有 .jpg 扩展名的文件递归工作):
exiftool -preserve -EXIF:Software= -if "$EXIF:Software =~ /(^Microsoft Windows Photo Viewer)/" -r -ext jpg .
exiftool -preserve -XMP:CreatorTool= -if "$XMP:CreatorTool =~ /(^Microsoft Windows Photo Viewer)/" -r -ext jpg .
如果一切正常,请使用以下命令删除备份
exiftool -delete_originals -r -ext jpg .
*
想象一下每个方形图块上都有 8x8 像素的图像 - 然后旋转每个图块 - 这就是 Windows 所做的。问题是当图块不是 8x8 时,即您无法将高度或宽度除以 8。然后 Windows 会重新压缩文件。
答案2
我可能在旧版本的 Microsoft Photo Viewer 中发现了另一个错误。我发现一串图像在 EXIF 数据中被标记为“Microsoft Photo Gallery 6.0.6001.18000”。
XResolution 和 YResolution 被错误地记录下来,要么是 1/96,而不是应该的 96/1,要么有时是 0/1,有时是“无限”,我不确定它试图表示什么。我应该补充一下,这是缩略图分辨率,因此它可能表明 MS Photo Viewer 正在创建缩略图。
当我尝试编写一本书时,这给 archive.org 带来了问题。
由于此版本的 Microsoft Photo Gallery 早已过时,我推测该错误已被解决。
我不得不使用软件“EXIF Pilot”来纠正这些不正确的字段;如果能够批量访问 EXIF 字段就好了,但是批处理工具是 EXIF Pilot 的高级插件,而且我也没有付费版的 Total Commander。
这些不是我的文件,因此我推测 EXIF 数据是如何损坏的,但我怀疑是 Microsoft Photo Viewer 造成的。