以下是我的代码 -
try {
InputStream inputStream = getAssets().open("thumbnail.jpg");
exifInterface = new ExifInterface(inputStream);
exifInterface.setAttribute(ExifInterface.TAG_ARTIST,"TEST INPUT");
exifInterface.saveAttributes();
} catch (IOException e) {
e.printStackTrace();
}
在exifInterface.saveAttributes()行中,我收到以下错误 -
java.io.IOException:ExifInterface不支持保存当前输入的属性。
我不确定错误是由于图像文件还是由于我想要保存的属性。我也在网上寻找可能的解决方案(例如Sanselan),但不确定它是否会解决这个问题。
有人可以解释如何解决这个问题吗?
谢谢!
答案 0 :(得分:3)
您无法使用输入流进行属性变异。
您可以查看ExifInterface的代码,它说:
/**
* Reads Exif tags from the specified image input stream. Attribute mutation is not supported
* for input streams. The given input stream will proceed its current position. Developers
* should close the input stream after use. This constructor is not intended to be used with
* an input stream that performs any networking operations.
*/
public ExifInterface(InputStream inputStream) throws IOException {
/* Irrelevant code here */
因此,如果您想要写入文件的元数据,则需要在构造函数中传递该文件。否则就会失败。您还可以在类中看到始终失败的代码(使用InputStream):
public void saveAttributes() throws IOException {
if (!mIsSupportedFile || mMimeType != IMAGE_TYPE_JPEG) {
throw new IOException("ExifInterface only supports saving attributes on JPEG formats.");
}
if (mFilename == null) {
throw new IOException(
"ExifInterface does not support saving attributes for the current input.");
}
//Irrelevant code
因此,使用ExifInterface(文件),您将能够使您的代码工作。
快乐的编码!
答案 1 :(得分:2)
ExifInterface does not support saving attributes for the current input.
当前输入为InputStream
。无法将数据保存到InputStream
。仅限OutputStream
。
第二个问题是assets
中的文件是只读的。因此,如果你尝试过,你甚至无法打开OutputStream
。太不可能了。
答案 2 :(得分:0)
我认为可能存在的问题是:在创建应用程序的压缩过程中,您尝试将属性添加到只读资源内的资源。
exifInterface仍然不支持在zip文件中添加属性。无论如何,您都可以轻松地将属性添加到SDCard中存在的其他文件中。