关于 Android 自定义相机照片旋转问题
最近在做一款 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();
}
};
当然有些个别手机本身摄像头驱动设置比较个性,旋转角度不同,这个只能单独处理了
有可以拍摄完在使用旋转,
手动旋转,电子陀螺仪性能不好
是不是要对摄像头进行设置
手机相机一般默认应该是横拍为主。所以竖拍的是出的照片方向都是旋转90度的。
找到了错误发生的缘由,做一个分享。事实上出现旋转问题的机型,在拍照时底层就已经对照片进行了90旋转,但我没有读取到旋转信息,原因是:拍照后得到的 byte[] 数组里存有照片旋转角度,不要转成 Bitmap,否则旋转角度将消失!!!!!!
如果想简单点,就是遇到什么机型图片有旋转,那就适配那个机型旋转就行了。现在好的各个厂商修改android源码让咱们自己去填坑,哪填的完,而且填坑还没啥好处,提升不了能力不说,还浪费时间。