最近在做一款 Android 端的自定义相机,发现有些手机(如三星、LG,大部分手机是正确的)拍出的照片方向并不对,
且通过 Exif 信息读取到的 旋转角度是 0,也就是说没有办法通过旋转角度去纠正所拍摄的照片。
另外,我在有问题的相机上装了其他类型的自定义相机,发现有些相机是可以拍摄出正确角度的照片的。
所以想问下大佬有什么合适解决方案,谢过!
最近在做一款 Android 端的自定义相机,发现有些手机(如三星、LG,大部分手机是正确的)拍出的照片方向并不对,
且通过 Exif 信息读取到的 旋转角度是 0,也就是说没有办法通过旋转角度去纠正所拍摄的照片。
另外,我在有问题的相机上装了其他类型的自定义相机,发现有些相机是可以拍摄出正确角度的照片的。
所以想问下大佬有什么合适解决方案,谢过!
Android相机一般默认应该是横拍为正。所以竖拍的是出的照片方向都是旋转90度的。需要在拍照完成后的监听里面,获取bitmap后进行旋转。
/**
* 旋转图片,使图片保持正确的方向。
*
* @param bitmap 原始图片
* @param degrees 原始图片的角度
* @return Bitmap 旋转后的图片
*/
private Bitmap rotateBitmap(Bitmap bitmap, int degrees) {
if (degrees == 0 || null == bitmap) {
return bitmap;
}
Matrix matrix = new Matrix();
matrix.setRotate(degrees, bitmap.getWidth() / 2, bitmap.getHeight() / 2);
Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
bitmap.recycle();
return bmp;
}
//获取照片中的接口回调
private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
@Override
public void onPictureTaken(final byte[] data, Camera camera) {
final int cameraid = mCameraId;
new Thread() {
@Override
public void run() {
super.run();
File file = new File(mImgPath);
FileUtils.createOrExistsFile(file);
// 获取当前旋转角度, 并旋转图片
mBitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
mBitmap = rotateBitmap(mBitmap, 90);
}
}.start();
}
};
当然有些个别手机本身摄像头驱动设置比较个性,旋转角度不同,这个只能单独处理了