将 ImageUniqueID 插入 JPEG 的 EXIF 数据而不使用 .NET 修改图像

Cri*_*inH 3 c# exif imagesharp

我需要在不修改图像内容的情况下将唯一 ID 插入图像文件 - 即它只是我想要修改的元数据。我从 JPEG 文件开始,因为有一个合适的 EXIF 属性可用:ImageUniqueID

我将 C# 与 .NET Core 3.1 一起用于ImageSharp 的这个练习。我可以使用以下代码使用 ImageSharp 更改 EXIF 数据(在没有现有记录检查的情况下显示简化等):

using (var image = Image.Load(filename))
            {
            var imageUniqueIdentifier = Guid.NewGuid().ToString().ToLower().Replace("-", "");
            image.Metadata.ExifProfile.SetValue(ExifTag.ImageUniqueID, imageUniqueIdentifier);

            var jpegEncoder = new JpegEncoder() { Quality = 100 };
            image.Save(filename, jpegEncoder);
            }
Run Code Online (Sandbox Code Playgroud)

我确实在 JpegEncoder 中使用了 Quality 设置,但仍然遇到了无法接受的质量下降或文件大小增加的问题。

有没有办法只读取元数据,更改它然后将其写回而根本不影响图像?

我还查看了MetadataExtractor.NET,但它没有写入功能,我很乐意查看其他 .NET Core 方法或库。

use*_*152 5

经过一些研究,我发现ExifLibrary允许您仅修改图像元数据。 文档(包括示例)

如何为 jpg 文件添加唯一图像 ID 的示例:

var file = ImageFile.FromFile("path_to_jpg_file");
var imageUniqueIdentifier = Guid.NewGuid().ToString().ToLower().Replace("-", "");
file.Properties.Set(ExifLibrary.ExifTag.ImageUniqueID, imageUniqueIdentifier);

file.Save("path_to_jpg_file");
Run Code Online (Sandbox Code Playgroud)

Nuget 包:ExifLibNet。

  • 我看了一下这个库,乍一看,它似乎满足了我的要求。在原始测试图像和修改后的图像之间使用_Beyond Compare_进行的测试表明_图像唯一ID_已正确插入。然而,其他一些属性已更改,尽管我仍在尝试确定它们是否重要或重要。它们是_GPS偏移(8825)、互操作性偏移(A005)、场景类型(A301)和JIF偏移(0201)_。 (2认同)