gpt4 book ai didi

java - MediaScanner 将照片重新插入图库并重置其方向和其他字段

转载 作者:行者123 更新时间:2023-11-29 22:15:43 26 4
gpt4 key购买 nike

我的应用程序创建照片,然后将其插入库存相机的画廊桶中。 (我希望照片存储在标准相机拍摄的其他照片附近)

下面的代码是这样做的:

ContentValues values = new ContentValues();
values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, taken_at);//msec
values.put(MediaStore.Images.ImageColumns.DATE_ADDED, taken_at/1000);//sec
values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, taken_at/1000);//sec
values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, fileName);
values.put(MediaStore.Images.ImageColumns.TITLE, fileName);
values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.ImageColumns.ORIENTATION, orientation);// << ORIENTATION
values.put(MediaStore.Images.ImageColumns.DATA, dir+"/"+fileName);
uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream os = getContentResolver().openOutputStream(uri);
// WRITE JPEG BINARY DATA

当我从 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 选择最后两张照片(一张由相机拍摄,第二张由我的应用拍摄)时,我得到以下信息:

fields:
_id, bucket_id, date_added, date_modified, datetaken, _display_name,
orientation, title

fields values of photo taken by stock camera:
4471, 856031460, 1323942742, 1323942742, 1323942742189, 2011-12-15 15.52.22.jpg,
90, 2011-12-15 15.52.22.jpg

values of photo taken by my app:
4470, 856031460, 1323942722, 1323942722, 1323942722545, 2011-12-15 15.52.02.jpg
90, 2011-12-15 15.52.02.jpg

到目前为止,还不错。它正确显示在图库中。当我重新安装 sdcard 并且媒体扫描仪完成他的工作时出现问题:

stock camera's photo after re-mounting sdcard
1241, 856031460, 1323942742, 1323942742, 1323942742189, 2011-12-15 15.52.22.jpg
90, 2011-12-15 15.52.22.jpg

my app's photo after re-mounting sdcard
1242, 856031460, 1323943033, 1323942722, 1323942722000, 2011-12-15 15.52.02.jpg
0, 2011-12-15 15.52.02
// WTF? orientation defaulted, date_added and date_modified were updated

看起来这些照片是重新插入的,但现在我的应用程序的照片是用字段的默认值(包括方向)重新插入的,而库存相机的照片值没有改变(_id 除外)!

现在我的应用程序的照片在图库中显示不正确(旋转,因为方向已重置),而普通相机的照片没问题。

媒体扫描器如何识别媒体数据库中的记录与它现在扫描的文件之间的关系?看起来在我的情况下它不能这样做,删除旧记录,“链接到不存在的文件”并插入新的“以前从未插入过”的记录。

任何想法,如何解决这个问题?

PS:两张照片都在同一个目录

最佳答案

MediaScanner 扫描目录中的文件,如果是照片,它会扫描包含 EXIF 标签的照片标题,并从中获取 ORIENTATION、DATE_TAKEN、DATE_MODIFIED 标签。如果此数据不等于数据库中的数据,则替换数据库数据。

如果遇到此问题,您需要使用有效值手动更新 ORIENTATION exif 标签。

另外我必须提到 Android exif 管理器有很多错误,您可能想要使用效果很好的 org.apache.sanselan 库。

关于java - MediaScanner 将照片重新插入图库并重置其方向和其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8519503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com