我正在尝试使用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 :(得分:3)
首先需要将位于google exif的exif文件复制到项目中,然后使用以下代码:
ExifInterface exif = new ExifInterface();
exifi.readExif(exifVar.getAbsolutePath());
exif.setTagValue(ExifInterface.TAG_USER_COMMENT, mString);
exif.forceRewriteExif(exifVar.getAbsolutePath()));
此处使用的ExifInterface是您刚刚添加的新内容。
答案 1 :(得分:2)
您正在使用exifVar.toString()
。这只返回文件名,而不是图像的路径。由于您的应用可能不在包含图片的文件夹中,因此您应使用exifVar.getAbsolutePath()
。
如果您在运行程序的同时没有拍摄照片,那么Path就不对了。请改用此代码:
File[] files = directory.listFiles();
if(files.length==0) {
// No images available
return;
}
File newestFile = files[files.length-1];
File exifVar = new File(directory.getPath() + File.separator + newestFile.getName());
题外话:
根据你庞大的导入列表:
import android.content.*;
进口
android.content.Context,
android.content.DialogInterface and
android.content.Intent
这会使你的代码变得更短。只是说
答案 2 :(得分:0)
确保将写入权限设置为sd(静态和动态), 同样对于Android 10,您需要设置以下内容: android:requestLegacyExternalStorage =“ true”
到清单应用程序