Android开发拍照图片旋转

在做照相机图片相关操作的时候,由于android手机的适配原因,不同手机上出发的相机操作可能在细节上有很多不同,例如摄像头拍照的角度旋转了,使得获取到的图片也是旋转后的,再比如某些相机的图片像素太高了,对图片数据进行操作的时候造成内存不足等。下面就对相机拍摄时的图像被旋转的问题进行一些实际的解决方案:

问题:由于摄像头拍照 是竖屏,显示的时候需要旋转了 90 度。也就是说显示的是 旋转90度后的 预览 图片?怎么处理...

有一种方法是在说在拍照的时候将内容显示设定为横屏显示,

 

<activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape">


还有在onCreate函数加入

 

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  


 

这样拍出来的图片就不能被旋转了。说实话,这种方式不具有通用型,而且很不灵活,不能适配所有手机。所以不建议,但是可以作为一个想法。

其实真正能解决这种问题的方法是找到相机在拍照后得到的原图和实际显示的图片的旋转角度,然后我们再通过Matrix对图片进行旋转就Ok了。

那么我们怎样获取相机拍摄的原图和实际显示图片的旋转角度呢?在网上找到了这种方法,经过验证,着实可行。

/**
         * 读取照片exif信息中的旋转角度
         * @param path 照片路径
         * @return角度
         */
        public static int readPictureDegree(String path) {
                int degree  = 0;
                try {
                        ExifInterface exifInterface = new ExifInterface(path);
                        int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                        switch (orientation) {
                        case ExifInterface.ORIENTATION_ROTATE_90:
                                degree = 90;
                                break;
                        case ExifInterface.ORIENTATION_ROTATE_180:
                                degree = 180;
                                break;
                        case ExifInterface.ORIENTATION_ROTATE_270:
                                degree = 270;
                                break;
                        }
                } catch (IOException e) {
                        e.printStackTrace();
                }
                return degree;
        }


得到原图和实际显示的图片的旋转角度后,我们再通过对原图进行旋转degree就行了,这个旋转方法可以通过Matrix实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值