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

标签 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);
            }

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

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

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

最佳答案

经过一番研究,我发现有 ExifLibrary这允许您仅修改图像元数据。
Documentation (包括示例)
如何为 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");
Nuget 包:ExifLibNet。

关于c# - 将 ImageUniqueID 插入 JPEG 的 EXIF 数据而不使用 .NET 修改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60951874/

相关文章:

c# - CSS 不会通过捆绑呈现,如果直接写在页面上可以正常工作

c# - 其他项目中的 Web Api Controller ,路由属性不起作用

c# - 将气球工具提示定位在树节点上

c# - Linq-to-Sql 过滤最后一个元素的日期

swift - EXIF数据读写

objective-c - 添加/传递(exif)缩略图到 CGImageDestinationRef

c# - 如何合成两个图像(使用 Source In 合成)?

c# - 使用 ImageSharp 加载的纹理显示白色 (opentk)

c# - 使用 ImageSharp 调整色阶和颜色

javascript - 在nodejs中读取tif图像元数据