我想做的事:
使用我自己的 PictureActivity* 拍照并添加 EXIF(地理标签)数据
*:实现SurfaceHolder.Callback
和使用Camera
什么不工作:
添加 EXIF GPS 数据
我尝试过
的:使用ExifInterface
and 手动设置Camera.Parameters
(使用设置 GPS 元数据的特定方法和使用params.set(String, Value)
)。
我正在使用 FlickrJ 将图片上传到 Flickr(是的,我已将 Flickr 设置为导入 GPS 数据——其他图片工作正常),但是这个工具也表示 EXIF 中没有 GPS 数据:http://regex。信息/exif.cgi
我错过了什么?
(Android 2.2, HTC Desire)
编辑:
- 相机设置为Geotag photos: On
- 我尝试使用硬编码的虚拟 GPS 位置
以下是手动设置参数的代码(在先删除 GPS 数据和未删除 GPS 数据的情况下都进行了尝试,并且还提到了set(String, Value)
):
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
Camera.Parameters p = mCamera.getParameters();
p.setPreviewSize(p.getPreviewSize().width, p.getPreviewSize().height);
Log.e("PictureActivity", "EXIF: "+AGlanceLocationListener.getLatitude());
p.removeGpsData();
p.setGpsLatitude( AGlanceLocationListener.getLatitude() );
p.setGpsLongitude( AGlanceLocationListener.getLongitude() );
p.setGpsAltitude( AGlanceLocationListener.getAltitude() );
p.setGpsTimestamp( AGlanceLocationListener.getTime() );
mCamera.setParameters(p);
}
这是使用的代码ExifInterface
:
//Save EXIF location data to JPEG
ExifInterface exif;
try {
exif = new ExifInterface("/sdcard/DCIM/"+filename+".jpeg");
exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE,
String.valueOf(AGlanceLocationListener.getLatitude()));
exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE,
String.valueOf(AGlanceLocationListener.getLongitude()));
exif.saveAttributes();
} catch (IOException e) {
Log.e("PictureActivity", e.getLocalizedMessage());
}
以下是将 JPEG 文件写入 SDCARD 的代码:
Camera.PictureCallback jpegCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] imageData, Camera c)
{
// Bitmap pic = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
String day = String.valueOf(Calendar.getInstance().getTime().getDay());
String hour = String.valueOf(Calendar.getInstance().getTime().getHours());
String minute = String.valueOf(Calendar.getInstance().getTime().getMinutes());
String second = String.valueOf(Calendar.getInstance().getTime().getSeconds());
filename = "Billede"+day+hour+minute+second;
try {
FileOutputStream fos = new FileOutputStream(new File("/sdcard/DCIM/"+filename+".jpeg"));
fos.write(imageData);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
if(imageData != null){
Intent mIntent = new Intent();
setResult(0,mIntent);
PictureActivity.this.showDialog(0);
}
}
};
还尝试从 a 写入图像Bitmap
(没有工作),加上另一个问题在这里报告使用FileOutputStream
工作