android "android" 修改 jpg exif 属性,如何在Android中将exif数据写入图像?

我正在尝试使用exif界面在Android应用程序中为捕获的图像编写User_Comment和TAG_GPS,但由于某种原因,当我在图库中查看图像的详细信息时,标记似乎没有附加到图像上.

似乎可能没有将标签写入捕获的图像,因为文件路径可能是错误的.我想这可能是因为我将标签写入了错误的图像路径.

有谁知道我的标签写入图像的方式是否有问题?

这是在@ Charlie的更改后保存exif数据的代码:

private File getOutputPhotoFile() throws IOException {

File directory = new File(Environment.getExternalStoragePublicDirectory(

Environment.DIRECTORY_PICTURES), getPackageName());

if (!directory.exists()) {

if (!directory.mkdirs()) {

Log.e(TAG, "Failed to create storage directory.");

return null;

}

}

String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date());

File[] files = directory.listFiles();

File exifVar = new File(directory.getPath(), "IMG_" + timeStamp + ".jpg");

if(files.length!=0) {

File newestFile = files[files.length-1];

exifVar = new File(directory.getPath() + File.separator + newestFile.getName());

}

String mString = "Generic Text..";

ExifInterface exif = new ExifInterface(exifVar.getAbsolutePath());

exif.setAttribute("UserComment", mString);

exif.saveAttributes();

exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,

String.valueOf(latituteField.toString()));

exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE,

String.valueOf(longitudeField.toString()));

exif.saveAttributes();

return exifVar;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Exif是Exchangeable Image File Format的缩写,用于在JPEG图像文件中存储元数据(metadata)信息。这些元数据包含了拍摄设备、拍摄时间、曝光参数、焦距、闪光灯、照片方向、GPS坐标等信息。 要读写JPEG图像Exif元数据,我们可以使用图像处理库或框架,例如Pillow(Python Imaging Library)等。下面是一个简单的示例代码: 首先,我们需要安装Pillow库。打开终端(命令提示符)并执行以下命令: ``` pip install pillow ``` 接下来,在Python脚本中导入Pillow库: ```python from PIL import Image from PIL.ExifTags import TAGS ``` 然后,打开JPEG图像文件并获取Exif元数据: ```python image = Image.open("example.jpg") exif_data = image._getexif() ``` 获取的Exif元数据是一个字典类型(dict)。我们可以通过循环遍历它并打印出每个元数据的标签(tag)和值(value): ```python for tag_id, value in exif_data.items(): tag_name = TAGS.get(tag_id, tag_id) print(f"{tag_name}: {value}") ``` 同样地,我们也可以修改Exif元数据: ```python exif_data[TagID] = new_value ``` 修改后的Exif元数据需要重新保存到图像文件中: ```python image.save("example_with_modified_exif.jpg") ``` 以上就是使用Pillow库读写JPEG图像Exif元数据的基本步骤。当然,根据具体需求,我们可以针对不同的Exif标签进行特定的操作,例如获取拍摄设备信息、修改拍摄时间等。 ### 回答2: JPG是一种常见的图像文件格式,其中包含了一些关于图像元数据exif),这些元数据可以提供有关图像的各种信息,例如拍摄日期、拍摄设备、曝光时间等。下面是关于如何读写JPG图像元数据的简单说明: 要读取JPG图像元数据,可以使用一些图像处理库或软件来实现。其中一个常用的库是Python的Pillow库。使用Pillow库,可以轻松地读取图像元数据。以下是读取JPG图像元数据的示例代码: ``` from PIL import Image # 打开图像 img = Image.open('image.jpg') # 获取元数据 exif_data = img._getexif() # 输出各个元数据的值 for tag, value in exif_data.items(): print(f'{tag}: {value}') ``` 要写入JPG图像元数据,也可以使用Pillow库来实现。以下是写入JPG图像元数据的示例代码: ``` from PIL import Image # 打开图像 img = Image.open('image.jpg') # 获取元数据 exif_data = img.info['exif'] # 修改元数据 exif_data['Exif.Image.Software'] = 'My Image Processing Software' # 保存图像,并写入新的元数据 img.save('new_image.jpg', exif=exif_data) ``` 在上面的示例代码中,我们首先使用`Image.open()`函数来打开JPG图像。然后,我们可以使用`_getexif()`方法获取图像的所有exif元数据。我们还可以使用`img.info['exif']`获取图像exif数据。接下来,我们可以根据需要修改相关的exif元数据。最后,我们可以使用`img.save()`方法将修改后的exif元数据保存到新的图像文件中。 总之,读写JPG图像元数据需要使用一些图像处理库或软件,例如Python的Pillow库。通过这些库,我们可以轻松地读取和写入JPG图像元数据。 ### 回答3: JPEG图像是一种广泛使用的图像格式,EXIF(Exchangeable Image File)是一种元数据格式,它提供了有关图像的详细信息。关于如何读写JPEG图像EXIF元数据,可以通过以下步骤来完成: 1. 读取EXIF元数据:可以使用各种图像处理库或软件来读取JPEG图像EXIF元数据。例如,Python中的Pillow库、Java中的ImageIO库以及Adobe Photoshop等软件都提供了读取EXIF元数据的功能。通过提供图像的路径或文件对象作为输入,这些库和软件可以将存储在JPEG图像中的EXIF元数据读取到内存中。 2. 解析EXIF标签:一旦EXIF元数据被读取到内存中,就可以通过解析EXIF标签来获取图像的各种信息。EXIF标签包含了图像的拍摄时间、相机型号、拍摄地点、曝光时间、ISO感光度等信息。不同的EXIF标签具有不同的标识符和数据类型,因此需要参考相关的EXIF标准来正确解析每个标签。 3. 修改EXIF元数据:如果需要修改JPEG图像EXIF元数据,可以使用相同的图像处理库或软件来完成。通过提供待修改EXIF标签和对应的新值,可以将新的EXIF元数据写入到JPEG图像中。需要注意的是,修改EXIF元数据可能会导致图像元数据与实际内容不一致,因此在修改前需谨慎考虑。 总之,读写JPEG图像EXIF元数据可以通过使用图像处理库或软件来实现。读取EXIF元数据可以通过提供图像路径或文件对象作为输入来完成。解析EXIF标签可以获取图像的各种信息。修改EXIF元数据可以通过提供待修改EXIF标签和新值来实现,但需谨慎考虑可能导致的不一致情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值