使用平板电脑拍照,它会根据相机位置旋转

take picture with Tablet it's rotated following the camera position

此应用程序可以拍照并将其存储在平板电脑上。 我有一些问题,因为这个应用程序使用 Odoo 框架,我不知道这是该框架的问题还是我在 Android 代码中遗漏的问题。

问题是,当我拍照时,只有当我使用平板电脑风景和右侧的主页按钮拍摄时,图像才好。 如果我改变旋转并拍照,图像会旋转...... 例如,如果我以横向和左侧的主页按钮拍照,则图像是颠倒的...... 如果我把它拍成肖像,图像会旋转 90°....

Android 请求图像不管理与设备旋转相关的图像旋转? 因为如果是...这是与 odoo 框架相关的问题...如果不是我需要管理它。

EDIT___

当 phone 离线时,我们调整图像大小并使用 Base64 存储和与 odoo 同步数据。

onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "onActivityResult() method");

    OValues response = fileManager.handleResult(requestCode, resultCode, data);
    if (response != null) {
        projectIssueImage = new ProjectIssueImage(this, null);
        OValues values = new OValues();

        String imageBase64 = BitmapUtils.uriToBase64(Uri.parse(response.getString("file_uri")), getContentResolver(), false);
        byte[] decodedImage = Base64.decode(imageBase64, Base64.DEFAULT);
        Bitmap bitmapImage = BitmapFactory.decodeByteArray(decodedImage, 0, decodedImage.length);
        Bitmap scaledBitmap = scaleDown(bitmapImage, 1000, true);
        ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
        scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOS);

        values.put("image", Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT));
        values.put("file_name", response.get("datas_fname"));
        values.put("file_type", response.get("file_type"));
        values.put("issue_id", currentObject);
        int _id = projectIssueImage.insert(values);
    }
    Intent returnIntent = new Intent();
    returnIntent.putExtra("id", currentObject);
    setResult(Activity.RESULT_OK, returnIntent);
    finish();
}

调整图像大小的代码

public static Bitmap scaleDown(Bitmap realImage, float maxImageSize,
                               boolean filter) {
    float ratio = Math.min(
            (float) maxImageSize / realImage.getWidth(),
            (float) maxImageSize / realImage.getHeight());
    int width = Math.round((float) ratio * realImage.getWidth());
    int height = Math.round((float) ratio * realImage.getHeight());

    Bitmap newBitmap = Bitmap.createScaledBitmap(realImage, width, height, filter);

    return newBitmap;
}

如果有帮助请勾选。

public int getCameraPhotoOrientation(Context context, 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;
            }

            Log.i("RotateImage", "Exif orientation: " + orientation);
            Log.i("RotateImage", "Rotate value: " + rotate);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rotate;
    }