【问题标题】:Change "Exif" data between onPictureTaken and write()?在 onPictureTaken 和 write() 之间更改“Exif”数据?
【发布时间】:2014-09-04 02:39:51
【问题描述】:

我正在为 custom 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.

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

【问题讨论】:

  • 这正是更改 data 的正确位置。你尝试了多少 exif 类?
  • 请原谅我的无知,但我什至不确定您所说的“exif 类”是什么意思。似乎有一个名为“exifinterface”的类,但它似乎需要一个 file 来构建,所以我假设它是一组在文件已经创建后对其进行操作的方法。
  • 所以你只尝试了ExifInterface。您没有尝试其他课程。还有其他课程吗?
  • 是的,Exif 数据已经包含在传递给 onPictureTaken 的 jpg_data 中

标签: android camera exif


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多