如何使用Android中的自定义相机类写Exif数据?

我有一个自定义相机应用程序,用于拍照和裁剪他们正方形,现在我想知道如何写Exif数据的最终输出图像(特别是方向)

这里是我的代码的重要部分:

captureButton = (Button) findViewById(R.id.button_capture); captureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Take a picture mCamera.takePicture(null, null, mPicture); } }); 

这是callback函数:

 PictureCallback mPicture = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File pictureFile = getOutputMediaFile(); if (pictureFile == null) { return; } try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } } }; 

更新:我增加了以下的onPictureTaken方法,但没有任何改变:

 ExifInterface exif; exif = new ExifInterface(pictureFile.getAbsolutePath()); // Notice getOrientation method gets an Integer with the angle : 0 , 90 , 180 , 270 ..etc exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(getOrientation()) ); exif.saveAttributes(); 

Solutions Collecting From Web of "如何使用Android中的自定义相机类写Exif数据?"

我知道这是旧的,但我有类似的问题,所以我想先填补这一点。 如果我理解你正在试图存储在.TAG_ORIENTATION exif属性的angular度。 这是不正确的,调整你的'getOrientation'方法给你一个特定于ExifInterface类的以下方向常量。

通过放置特定的angular度,Exif数据将被Image Viewers错误地读取,以及我如何读取您正在做的事情。

int ORIENTATION_FLIP_HORIZONTAL int ORIENTATION_FLIP_VERTICAL
int ORIENTATION_NORMAL int ORIENTATION_ROTATE_180
int ORIENTATION_ROTATE_270 int ORIENTATION_ROTATE_90
int ORIENTATION_TRANSPOSE int ORIENTATION_TRANSVERSE
int ORIENTATION_UNDEFINED