如何知道相机拍摄的照片的方向? [复制]
Posted
技术标签:
【中文标题】如何知道相机拍摄的照片的方向? [复制]【英文标题】:How to know the orientation of picture taken by the Camera? [duplicate] 【发布时间】:2019-03-19 20:00:15 【问题描述】:我正在制作一个应用程序,在该应用程序中,我必须在服务中每隔一秒拍摄一张照片,而无需启动相机预览。
我在服务中写了以下代码,可以拍照了。
if (cameraId < 0)
Log.d(TAG, "No camera found");
else
camera = Camera.open(cameraId);
camera.startPreview();
camera.takePicture(null, null, bitmapHandler);
在 bitmapHandler 类中,我在
中获取捕获图像数据@Override
public void onPictureTaken(byte[] data, Camera camera)
.
.
.
-
当我以纵向模式拍照时,生成的图像顺时针旋转 90 度。
当我在横向模式下拍照时,生成的图像是正确的。
当我在反向横向模式下拍照时,生成的图像旋转了 180 度
当我在反向模式下拍照时,生成的图像旋转了 270 度
我做了什么来获得正确的图像,以便我可以将该图像输入我的神经网络。
我尝试了什么:当图像以纵向模式拍摄时,我将位图旋转了 90,但仍然无法找到图像是在哪种模式下拍摄的。
Camera API 有没有办法知道或控制旋转角度?
【问题讨论】:
设备方向不是Camera API的一部分,但您可以从设备中找到它 见 How to detect when the device switch from portrait to landscape mode? 和 Rotating phone quickly 180 degrees, camera preview turns upside down 感谢@AlexCohn,我可以使用 OrientationEventListener 在我的服务中获取轮换更改信息 【参考方案1】:我使用的是fixImageOrientation函数,参数是图像本身和图像文件的路径(作为第二个参数,我传递的是相机活动存储临时图像文件的路径)
public static Bitmap rotateImage(Bitmap bmp, float angle)
Matrix matrix = new Matrix();
matrix.postRotate(angle);
System.out.println("Rotating image " + Float.toString(angle) + " degrees, rotateImage()");
return Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
public static Bitmap fixImageOrientation(Bitmap bmp, String path)
ExifInterface ei;
boolean changed = true;
try
ei = new ExifInterface(path);
int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
if (orientation == ExifInterface.ORIENTATION_ROTATE_90)
bmp = rotateImage(bmp, 90);
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180)
bmp = rotateImage(bmp, 180);
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270)
bmp = rotateImage(bmp, 270);
else
changed = false;
catch (IOException e)
System.out.println("IOException, image probably has no exif data, fixImageOrientation()");
e.printStackTrace();
if (changed)
System.out.println("Image orientation fixed, fixImageOrientation()");
else
System.out.println("Image orientation did not change, fixImageOrientation()");
return bmp;
【讨论】:
它在我保存捕获的图像然后尝试 Exif 数据的情况下工作。但就我而言,我不需要保存图像,只想将相同的图像输入神经网络模型。 如何使用相机 API 拍摄图像。以上是关于如何知道相机拍摄的照片的方向? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
使用原生 iOS 相机应用程序拍摄的照片总是 UIImage 方向向上