提问人:Beb 提问时间:4/1/2023 更新时间:10/27/2023 访问量:418
Android / Samsung Gallery - 更改 date taken 属性
Android / Samsung Gallery - Changing date taken property
问:
2022 年 11 月 3 日,当我的三星 Galaxy 设备空间不足时,我在 SD 卡上复制了大约 3'000 张照片。 糟糕的举动:我拥有的所有照片(尤其是 Whatsapp 照片)现在都被标记为 11 月 3 日拍摄的。
然后,我在 .NET MAUI 中编写了一个应用程序,它将创建/上次访问时间/上次写入时间更改为取决于文件名 - 例如。: IMG-20210627-WA0001.jpg 将这些值设置为 2021 年 6 月 27 日午夜。我记录了之前/之后的日期,效果很好。
举个例子,我将日期设置为 2021 年 11 月 28 日午夜。
DateTime newTime = new DateTime(2021, 11, 28, 0,0,0);
File.SetCreationTime("/storage/3439-3532/DCIM/Test EXIF/IMG-20210627-WA0002.jpg", newTime);
File.SetLastWriteTime("/storage/3439-3532/DCIM/Test EXIF/IMG-20210627-WA0002.jpg", newTime);
File.SetLastAccessTime("/storage/3439-3532/DCIM/Test EXIF/IMG-20210627-WA0002.jpg", newTime);
但是,在图库应用程序中,文件仍然显示在 11 月 3 日,并且在图片信息中,我仍然看到错误的日期。
有什么想法吗?
答:
好吧,经过一番挣扎,我终于明白了。 @Jason是对的,它与EXIF有关,但我看了错误的标签:我专注于日期时间和date_digitized但那些是错误的。我使用网站 https://exif.tools/ 来检查我正在寻找的内容,而“日期/时间原始”就是我正在寻找的内容。我一开始没有找到它,因为我使用 python 库来获取 EXIF 数据,但是,唉,该字段没有记录在我的 Python 库的 img.list_all() 命令中,该命令应该列出所有可用的 EXIF 标签(尽管存在且可访问)......
无论如何,这是我的代码作为 C# MAUI .NET 中的示例。在 EXIFLibNet Nuget 包的帮助下,这只需要几行。
如果有人想知道(像我一样),ImageFile.FromFile 来自 ExifLibrary 命名空间,而不是来自标准 System.XXX 命名空间。
// Use of Nuget : EXIFLibNet. Add using ExifLibrary;
string imgpath = @"C:\EXIF Cleanup\IMG-20230301-WA0004_01.jpg";
DateTime newDateTime = new DateTime(2023,03,01);
var file = ImageFile.FromFile(imgpath);
file.Properties.Set(ExifTag.DateTimeOriginal, newDateTime);
file.Save(imgpath);
这成功地更改了文件属性中的窗口的“拍摄日期”字段>详细信息窗口,该窗口似乎是为Samsung Gallery =>拍摄的字段,当我将生成的文件复制到我的设备时,它显示在正确的日期。
但要注意,因为如果您不指定 newDateTime 的时间,则有 2 个 EXIF 属性、offset_time 和 offset_time_original 可能会导致问题:在我的测试中,这导致了 2 小时的偏移,在 3 月 1 日前一天标记了我的图片。
这适用于我笔记本电脑上的 MAUI 应用程序,我明天将在我的设备上进行测试,如果需要,如果这不起作用,我会相应地更新我的答案。
评论