当前位置: 首页 > 知识库问答 >
问题:

从新的谷歌照片应用程序中选择照片的方向不正确

房育
2023-03-14

我试图选择在Android上使用意图的照片。所有作品和照片正在检索从任何照片应用程序(相机,画廊,截图等...即使从新的照片应用程序中选择);除了那些在谷歌照片上备份在线。

在获得位图时,在人像拍摄的照片将在风景中检索。我有代码来获取照片的方向,这样我就可以相应地翻译,但是在新的谷歌照片应用程序上选择在线照片时,方向总是0。任何想法,我应该如何获得这些照片的方向,因为0正在返回?代码如下-谢谢。

出发意图

Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, IMPORT_PHOTO_RESULT);

意图结果

Uri selectedImageUri = data.getData();
imageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);

//fix rotation
int orientation = -1;
Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), selectedImageUri, new String[] { MediaStore.Images.ImageColumns.ORIENTATION });

try {
    if (cursor.moveToFirst()) {
        orientation = cursor.getInt(0);
    }
} finally {
    cursor.close();
}

imageBitmap = Utils.rotateImageWithRotation(orientation, imageBitmap);

//get stream to display and send
ByteArrayOutputStream stream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
// get byte array here
byte[] bytearray = stream.toByteArray();
sendImage(bytearray, null);

旋转图像

public static Bitmap rotateImageWithRotation(int rotationInDegrees, Bitmap mBitmap) {
    Matrix matrix = new Matrix();
    if (rotationInDegrees != 0f) {
        matrix.preRotate(rotationInDegrees);
    }
    Bitmap adjustedBitmap = Bitmap.createBitmap(mBitmap, 0, 0, mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
    return adjustedBitmap;
}

共有2个答案

石喜
2023-03-14

您可以尝试以下方法:

Bitmap bitmap = null;
            try {
                Bitmap tmpBmp;
                Uri uri = params[0]; // remove uri with uri from intent
                int angle = 0;
                Matrix m = new Matrix();
                BitmapFactory.Options tempOption = new BitmapFactory.Options();
                tempOption.inSampleSize = 2;
                AssetFileDescriptor fileDescriptor = getContentResolver().openAssetFileDescriptor(uri, "r");
                tmpBmp = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, tempOption);

                ExifInterface ei = new ExifInterface(uri.getPath());
                int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

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

                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 2;
                if (Runtime.getRuntime().totalMemory() > 64 * 1024 * 1024) {
                    options.inPreferredConfig = Bitmap.Config.RGB_565;
                }
                bitmap = Bitmap.createBitmap(tmpBmp, 0, 0, tempOption.outWidth, tempOption.outHeight, m, true);
            } catch (Exception e) {
                Log.e(LOG_TAG, e.getMessage(), e);
            }
            return bitmap;
汝楷
2023-03-14

我放弃了,转而使用这个惊人的图书馆。工作的荣誉!

https://github.com/coomar2841/image-chooser-library

 类似资料:
  • 我的应用程序有能力从库中选择照片。正是我想要的文件路径从这个选择。

  • 有人听说过com吗。谷歌。Android应用程序。照片。准许谷歌照片?我似乎在文档中的任何地方都找不到它,但运行4.3及以上版本的用户例外。 如果你有任何关于它的信息,请分享 谢谢你

  • 我开发了一个功能,可以从设备库中获取所有照片。并在我的应用程序的列表中显示它们。现在我需要从“谷歌照片”中获取照片,我似乎找不到一个简单的方法来实现它。

  • 我想集成谷歌照片api在Android,我已经做了谷歌登录过程中,但我不能得到访问令牌,因为我得到错误的FixedCreentalsProvider.create方法,而传递参数。

  • 问题:我使用的意图是允许用户选择照片。当他们从设备上的图像中选择照片时,我能够使用ExifInterface获得纬度和经度。然而,当他们从谷歌照片中选择照片时,我无法从uri返回中获得地理位置。 详细信息:我使用的意图如下所示: 当用户从Google Photos中选择一张未存储在设备上的照片时,Google Photos首先下载该照片并返回一个URI,该URI不包括设备上的位置。我正在使用它将流

  • 很长一段时间以来,我一直在研究如何保存片段之间的状态,所以当我返回时,就好像你从未离开过一样。谷歌照片就是一个重要的例子。当你滚动浏览你的照片,然后转到另一个片段并返回时,你会保持原样。我的问题是,既然我的应用程序加载了不同的片段,当它们返回到这些片段时,它们会被重新创建,而不是像谷歌照片那样加载以前的状态,那么这怎么可能实现呢。我所尝试的: 定义nav_host_fragment的部分代码,因为