Veson__
此人已下架
2018-05-24 12:20
采纳率: 33.3%
浏览 2.9k

关于 Android 自定义相机照片旋转问题

最近在做一款 Android 端的自定义相机,发现有些手机(如三星、LG,大部分手机是正确的)拍出的照片方向并不对,
且通过 Exif 信息读取到的 旋转角度是 0,也就是说没有办法通过旋转角度去纠正所拍摄的照片。

另外,我在有问题的相机上装了其他类型的自定义相机,发现有些相机是可以拍摄出正确角度的照片的。

所以想问下大佬有什么合适解决方案,谢过!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • doushuai1020
    doushuai1020 2018-05-25 03:01
    已采纳

    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();
        }
    };
    
    
        当然有些个别手机本身摄像头驱动设置比较个性,旋转角度不同,这个只能单独处理了
    
    点赞 评论
  • TAOTAOWEI
    陶果儿 2018-05-24 12:38

    有可以拍摄完在使用旋转,

    点赞 评论
  • eryacine
    eryacine 2018-05-24 22:40

    手动旋转,电子陀螺仪性能不好

    点赞 评论
  • qq_34948485
    qq_34948485 2018-05-25 01:55

    是不是要对摄像头进行设置

    点赞 评论
  • ronnies
    ronnies 2018-05-25 03:08

    手机相机一般默认应该是横拍为主。所以竖拍的是出的照片方向都是旋转90度的。

    点赞 评论
  • leiyaqiang
    Lyq0120 2018-05-25 06:30

    http://www.jb51.net/article/112567.htm 很多人都知道三星手机拍照的问题,网上有不少帖子

    点赞 评论
  • Veson__
    此人已下架 2018-05-30 08:49

    找到了错误发生的缘由,做一个分享。事实上出现旋转问题的机型,在拍照时底层就已经对照片进行了90旋转,但我没有读取到旋转信息,原因是:拍照后得到的 byte[] 数组里存有照片旋转角度,不要转成 Bitmap,否则旋转角度将消失!!!!!!

    点赞 评论
  • u011586504
    闪电Tonn 2018-11-01 10:06

    如果想简单点,就是遇到什么机型图片有旋转,那就适配那个机型旋转就行了。现在好的各个厂商修改android源码让咱们自己去填坑,哪填的完,而且填坑还没啥好处,提升不了能力不说,还浪费时间。

    点赞 评论

相关推荐