三星手机拍照旋转问题

获得拍照照片后,查看旋转角度,如果有旋转角度,说明被旋转了,再使用旋转矩阵旋转回来即可。

调用方:

int degree = BitmapUtils.getBitmapDegree(file.getAbsolutePath());
BitmapUtils.compressBitmapForUploadLimitMaxSize(this, file, MAX_UPLOAD_SIZE);
BitmapUtils.rotateBitmapByDegree(file, degree);
public static int getBitmapDegree(String path) {
        int degree = 0;
        try {
            // 从指定路径下读取图片,并获取其EXIF信息
            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;
    }

    public static void rotateBitmapByDegree(File file, int degree) {
        if (file == null || !file.exists() || degree == 0) {
            return;
        }
        Bitmap bitmap = null, rotatedBitmap = null;
        try {
            bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
            if (bitmap == null) {
                return;
            }
            // 根据旋转角度,生成旋转矩阵
            Matrix matrix = new Matrix();
            matrix.postRotate(degree);
            // 将原始图片按照旋转矩阵进行旋转,并得到新的图片
            rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
            saveBitmap2file(rotatedBitmap, file);
        } catch (OutOfMemoryError e) {
            L.exception(e);
        } finally {
            if (bitmap != null) {
                bitmap.recycle();
            }
            if (rotatedBitmap != null) {
                rotatedBitmap.recycle();
            }
            System.gc();
        }
    }
时间: 2024-08-26 15:37:17

三星手机拍照旋转问题的相关文章

解决三星手机拍照后,图片旋转。

最近项目中遇到用三星手机拍照,图片会自动旋转,应该是三星内部系统的功能,然后需要是不让他旋转,找到了方法. 原理就是,获取到图片,判断它的旋转角度,然后相应的旋转回来. 在拍照的返回结果中,获取到图片的路径. path = filePath + fileName;  //path 为拍照返回的路径 File file = new File(path); int degree = readPictureDegree(file.getAbsolutePath()); Bitmap smallBitm

三星手机拍照,丢失照片

三星部分机型拍照成功之后,在onActivityResult()中接受不到照片路径,在网上找了很久,在某高人的回复中找到答案.... 需要在manifest.xml配置中activity->configChanges添加screenSize.4.0以后新增的屏幕尺寸改变(三星手机拍照屏幕会旋转,转来转去就把数据转没了)... <activity    android:name=".activity.my.MyNewsInfoActivity_"    android:con

轻量级封装处理拍照剪裁解决三星手机拍照问题

Android照片处理框架,支持拍照,从相册选择照片,照片裁切与压缩的轻量级框架--TakePhoto 该框架封装了部分机型 如三星手机拍完照片旋转屏幕遇到的一些问题. 如github上面介绍的那样 只需要继承 继承TakePhotoActivity.TakePhotoFragmentActivity.TakePhotoFragment三者之一. 重写三个方法: void takeSuccess(String imagePath); void takeFail(String msg); void

vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload),或者传统上传图片的方式,各有利弊:插件的问题是依赖jq并且会使系统比较臃肿,还有传统的web开发模式 前后端偶尔在一起及对用户体验要求低,现在公司采用webpack+vue+restfullApi开发模式 前后端完全分离,遵从高内聚,低偶尔的原则,开发人员各司其职,一则提升开发效率(从长期来看,短期

Android 相机开发中的坑

android 开发中经常遇到拍照的需求,android 系统帮我们把相机封装成了Camera类,除了Camera还有个SurfaceView 需要用到,核心的就这2个. # 先说下简单实现,在说里面的坑 一般实现是写个自定义view  例如(CameraView)继承SurfaceView在View 的构造方法中完成相机的初始化 重要的函数 就是 Camera.open() 和 Camera.open(i); 前一个打开时直接打开后置摄像头,后面的打开摄像头方法可以选择 打开具体的摄像头  (

canvas和base64

base64是二进制数据的一个编码格式,就像utf8一样的东西 他跟json一样,也是前后端交互能够相互识别的数据,他更多的是用来传递文件数据 在js里生成base64的API有两个,一个是FileReader,一个是画布canvas FileReader <input type="file" onchange="change(this.files[0])"> function change(file){ var fr = new FileReader(

关于android中调用系统拍照,返回图片是旋转90度..

由于项目的需要,没有自定义拍照功能,仅仅调用了系统的拍照程序..但是出现了一个问题,就是拍照完成显示图片居然是被旋转的图片.... 解决办法: /** * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转 */ int degree = readPictureDegree(f.getAbsolutePath()); BitmapFactory.Options opts=new BitmapFactory.Options();//获取缩略图显示到屏幕上 opts.inSampleSiz

android 选择图片或拍照时旋转了90度问题

由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下: 首先直接看上面博文下的拍完照或者选完图后处理部分: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 1: if (data != null) { // 取得返

部分Android手机拍照后照片被旋转的解决方案

在部分Android手机(如MT788.Note2)上,使用Camera拍照以后,得到的照片会被自动旋转(90°.180°.270°),这个情况很不符合预期.仔细分析了一下,因为照片属性中是存储了旋转信息的,所以要解决这个问题,可以在onActivityResult方法中,获取到照片数据后,读取它的旋转信息,如果不是0,说明这个照片已经被旋转过了,那么再使用android.graphics.Matrix将照片旋转回去即可. 1.读取图片的旋转属性 /**  * 读取图片的旋转的角度  *  *