首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CameraCaptureSession将图片旋转为风景的安卓捕获图片

使用CameraCaptureSession将图片旋转为风景的安卓捕获图片
EN

Stack Overflow用户
提问于 2015-11-05 17:58:02
回答 1查看 135关注 0票数 0

在一些设备上,CaptureSession拍摄的照片会旋转到风景中,这没问题。

我的问题是,我会检测图片是否保存在景观中,并将其旋转回来保存。因为现在,结果是用户让一些型号的个人资料图像旋转。

目前,我已经尝试了许多解决方案,包括

代码语言:javascript
复制
getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

它总是返回0。

我在想,如果由于某种原因,JPEG文件中的Exif标签没有设置,但我没有找到任何关于它的东西。

到目前为止,我的解决方案中效果最好的是这个。它只检查高度和宽度。这并不总是有效的。很多设备都有旋转图片的问题。

代码语言:javascript
复制
public static Bitmap rotate90ifneeded(Bitmap bitmap, int width, int height) {
    Bitmap bitmap2 = bitmap;
    if(bitmap.getHeight() < bitmap.getWidth()) {
        Matrix matrix = new Matrix();
        matrix.postRotate(90);
        bitmap2 = Bitmap.createBitmap(bitmap , 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    }
    return bitmap2;
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-05 18:01:32

使用此方法可确定图像旋转。

代码语言:javascript
复制
public int getCameraPhotoOrientation(Uri imageUri, String imagePath) {
        int rotate = 0;
        try {
            _context.getContentResolver().notifyChange(imageUri, null);
            File imageFile = new File(imagePath);
            ExifInterface exif = new ExifInterface(
                    imageFile.getAbsolutePath());
            int orientation = exif.getAttributeInt(
                    ExifInterface.TAG_ORIENTATION,
                    ExifInterface.ORIENTATION_NORMAL);

            switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_270:
                    rotate = 270;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    rotate = 180;
                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    rotate = 90;
                    break;
            }


        } catch (Exception e) {
        }
        return rotate;
    }

如果该方法不返回Zero,则旋转图像。

代码语言:javascript
复制
int degree=getCameraPhotoOrientation(Uri.fromFile(tempFile), fPath);
if (degree!= 0) {
      bitmap = tools.rotateOrientationCall(bitmap, degree);
 }

旋转您的位图。

代码语言:javascript
复制
public Bitmap rotateOrientationCall(Bitmap src, float degree) {
        Matrix matrix = new Matrix();
        matrix.postRotate(degree);
        return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33541481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档