Galaxy S2拍摄人像照片并添加ORITENTATION_ROTATION_90 exif tag
。
因此,当我将照片上传到我的服务器时,它会以横向显示。
我正在使用min API 8.
我很困惑,如果有人解释,我会很感激。
1)我试过了:
ExifInterface exif;
try {
exif = new ExifInterface(imageFilename);
int orientation =
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
exif.setAttribute(ExifInterface.TAG_ORIENTATION,
String.valueOf(ExifInterface.ORIENTATION_ROTATE_270));
//also tried ExifInterface.ORIENTATION_ROTATE_UNDEFINED)
exif.saveAttributes();
orientation =
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
boolean b = orientation == Configuration.ORIENTATION_LANDSCAPE;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但它没有帮助。属性已更改,但图像仍处于横向状态。
2)我目前的解决方案:
在客户端创建一个新的旋转位图。
但这可能代价高昂。
3)另一个建议的解决方案:
Camera.Parameters :: setRotation
...相机驱动程序可能会旋转图片和EXIF缩略图。 如果旋转Jpeg图片,则EXIF标题中的方向 将丢失或1(行#0是顶部,列#0是左侧)。
然后我看到了这段代码:
public void onOrientationChanged(int orientation) {
if (orientation == ORIENTATION_UNKNOWN) return;
int rotation = activity.getWindowManager().getDefaultDisplay()
.getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
parameters.setRotation(degrees );
mcamera.setParameters(parameters);
}
(3)会满足我的需求吗?
stackoverflow中的另一位朋友说只有(2)会为我工作
但我无法理解为什么。