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

时间:2018-05-28 12:14:47

标签: android image odoo-11

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

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

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

EDIT ___

我们调整图像大小并使用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;
}

1 个答案:

答案 0 :(得分:0)

检查这是否有帮助。

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;
    }