我有一个应用程序,使用本地
如何更改EXIF方向?我不是要找到一种可以适用于每种情况的纠正方法,只是更改为不同的值。
我正在使用三星Galaxy Note 4。
我尝试了这个解决方案,在拍照之前设置相机方向:设置Android照片EXIF方向。
但是它不会影响最终的EXIF数据,它仍然始终为0。
我还尝试了这些解决方案,其中图像在拍摄后被旋转:使用纵向相机应用程序拍摄的图像的EXIF方向标记值始终为0 虽然这会旋转照片,但EXIF方向仍然始终为0。
我还尝试直接设置EXIF数据:如何在Android中压缩位图后保存Exif数据。
相机
捕获照片,然后将它们上传到服务器。我的问题是所有照片都具有0的EXIF方向值,这会在其他地方引起问题。如何更改EXIF方向?我不是要找到一种可以适用于每种情况的纠正方法,只是更改为不同的值。
我正在使用三星Galaxy Note 4。
我尝试了这个解决方案,在拍照之前设置相机方向:设置Android照片EXIF方向。
Camera c = Camera.open();
c.setDisplayOrientation(90);
Camera.Parameters params = mCamera.getParameters();
params.setRotation(0); // tried 0, 90, 180
c.setParameters(params);
但是它不会影响最终的EXIF数据,它仍然始终为0。
我还尝试了这些解决方案,其中图像在拍摄后被旋转:使用纵向相机应用程序拍摄的图像的EXIF方向标记值始终为0 虽然这会旋转照片,但EXIF方向仍然始终为0。
我还尝试直接设置EXIF数据:如何在Android中压缩位图后保存Exif数据。
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
final File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
ExifInterface exif = new ExifInterface(pictureFile.toString());
exif.setAttribute(ExifInterface.TAG_ORIENTATION, "3");
exif.saveAttributes();
fos.write(data);
fos.close();
//upload photo..
}
}
}
但是上传后EXIF方向仍为0。
我还看过这些解决方案:
但它们都涉及通过旋转来矫正方向,这不会影响EXIF数据,或者直接设置EXIF数据,似乎也行不通。
我该如何将文件的EXIF方向数据从0更改为3?
更新:
这是我的上传代码:
Bitmap sBitmap = null;
final File sResizedFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "_2");
try {
sBitmap = BitmapFactory.decodeStream(new FileInputStream(pictureFile), null, options);
} catch (FileNotFoundException e) {
Log.e("App", "[MainActivity] unable to convert pictureFile to bitmap");
e.printStackTrace();
return;
}
// ... compute sw and sh int values
Bitmap sOut = Bitmap.createScaledBitmap(sBitmap, sw, sh, false);
Bitmap rotatedBitmap = rotateBitmap(sOut, 3);
FileOutputStream sfOut;
try {
sfOut = new FileOutputStream(sResizedFile);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, sfOut);
sfOut.flush();
sfOut.close();
sBitmap.recycle();
sOut.recycle();
rotatedBitmap.recycle();
} catch (Exception e) {
Log.e("App", "[MainActivity] unable to save thumbnail");
e.printStackTrace();
return;
}
// upload small thumbnail
TransferObserver sObserver = transferUtility.upload(
"stills/small", /* The bucket to upload to */
filename + ".jpg", /* The key for the uploaded object */
sResizedFile /* The file where the data to upload exists */
);