Android / Samsung Gallery - 更改 date taken 属性

Android / Samsung Gallery - Changing date taken property

提问人:Beb 提问时间:4/1/2023 更新时间:10/27/2023 访问量:418

问:

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 日,并且在图片信息中,我仍然看到错误的日期。

有什么想法吗?

Android 图像 日期时间 毛伊岛

评论

0赞 Jason 4/1/2023
检查EXIF数据。有大量的EXIF工具应该可以让你解决这个问题。
0赞 Beb 4/1/2023
是的,会的。我尝试了一个 EXIF 库,但它说它没有 EXIF 数据,所以我会在我的电脑上尝试一些带有 EXIF 文件的 scénario。
0赞 Beb 4/2/2023
好吧,它没有用。:我从网络上复制了一个带有EXIF数据的文件(拍摄于2008年):raw.githubusercontent.com/ianare/exif-samples/master/jpg/...并将其复制到SD卡上。它看起来像是在复制文件时拍摄的...我昨天用手机拍了一张照片,把它到我的电脑上,然后放回我的SD卡,它被标记在正确的日期,而Whatsapp中来回移动的图片有不正确的日期。似乎手机上导入的任何不是来自相机的文件都设置了错误的时间。有什么想法吗?
0赞 Jason 4/2/2023
这听起来更像是一个一般的Android或三星问题,与软件开发无关
0赞 Beb 4/2/2023
或者也许它毕竟不是EXIF数据......我仍在做一些测试:似乎当我通过 Windows 资源管理器更改文件的“拍摄日期”属性时,它确实有效:我尝试了 3 个文件:它们具有相同的 EXIF DateTime,但在 Windows 中具有 3 个不同的“拍摄日期”,所以这就是我现在想要实现的目标。

答:

0赞 Beb 4/2/2023 #1

好吧,经过一番挣扎,我终于明白了。 @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 应用程序,我明天将在我的设备上进行测试,如果需要,如果这不起作用,我会相应地更新我的答案。

评论

0赞 Beb 4/3/2023
它确实奏效了。不过,图库需要一些时间来刷新。