android - 在 onPictureTaken 和 write() 之间更改 "Exif"数据?

标签 android camera exif

我正在为自定义 Android 设备开发应用程序。目前仍处于开发早期阶段,相机可能会与设备的其余部分物理旋转 90 度。这意味着它拍摄的任何图像的肖像和风景之间都存在很大的混淆。出于这个原因,我希望对相机拍摄的任何图像中的 Exif 数据进行绝对控制。相机参数中的纵向与横向信息可能不正确。出于这个原因,我希望能够在保存图像之前强制更改 onPictureTaken 内的 Exif 数据。这可能吗?如果可能的话,如何实现?

我很挣扎,因为使用 exif 数据的示例似乎要么通过更改相机参数来工作,要么通过处理已保存的文件来工作 - 所以这要么太早,要么太晚!

    public void onPictureTaken(byte[] jpg_data, Camera camera)
    {
        // can I change exif data here?

        try 
        {       
            FileOutputStream buf = new FileOutputStream(filename);
            buf.write(jpg_data);
            //... etc.

编辑:也许我在这里误解了一些东西...传递给 onPictureTaken 的 jpg_data 中是否已包含 Exif 数据?还是选择性添加的?

最佳答案

在 Android 中写入 exif 数据的标准方法是使用 ExifInterface,遗憾的是该方法仅适用于已写入磁盘的文件。

如果您希望在不使用库的情况下进行 exif 写入,那么您必须在 FileOutputStream 完成文件写入后执行此操作。

如果您不介意使用库,Sanselan ( http://commons.apache.org/proper/commons-imaging/ ) 可能能够对 byte[] 数组执行此操作,但文档非常有限。

关于android - 在 onPictureTaken 和 write() 之间更改 "Exif"数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610784/

相关文章:

openCV:是否可以对 cvQueryFrame 进行计时以与投影仪同步?

java - 使用前置摄像头但仍然打开闪光灯

android - 初学者 Android 开发问题 - 相机特定问题

android - 在 ScrollView 中将 View 添加到布局底部

java - MediaPlayer start()/stop() mUri 为 null

android - 操作栏菜单项文本为大写

android - 支持库 ExifInterface 检查属性是否存在或获取所有属性

android - 更改用户评论 EXIF 标签 (0x9286)

Android - 查找照片的方向是由相机拍摄的

带有 ListView 的 Android 选项卡