如何在 Glide 中旋转图像使其正面朝上

How to rotate an image in Glide to be right side up

我是一个新手 Android 开发人员,但我正在从事一个项目,以提高我们应用程序处理图像时的内存效率。

现在,我们有一些代码可以根据 Exif 数据旋转图像以确保图像正面朝上。我想做同样的事情,但在 Glide 中,但我找不到任何相关文档......甚至找不到有关读取 Exif 数据的文档。

我不得不想象这是一个相当常见的用例!我想采用以下代码并将其简化为简单的 Glide 方法。

这是我们现在拥有的:

final Matrix bitmapMatrix = new Matrix();
int widthMultiplier = 1;
int heightMultiplier = 1;
try {
    Metadata metadata = ImageMetadataReader.readMetadata(new ByteArrayInputStream(bo.toByteArray()));
    final Collection<ExifIFD0Directory> exifIFD0Directories = metadata.getDirectoriesOfType(ExifIFD0Directory.class);
    if (exifIFD0Directories != null) {
        for (ExifIFD0Directory d : exifIFD0Directories) {
            if (d.containsTag(ExifIFD0Directory.TAG_ORIENTATION)) {
                try {
                    final int exifOrientation = d.getInt(ExifIFD0Directory.TAG_ORIENTATION);

                    switch (exifOrientation) {
                        case 1:
                            break;  // top left
                        case 2:
                            heightMultiplier = -1;
                            break;  // top right
                        case 3:
                            bitmapMatrix.postRotate(180);
                            break;  // bottom right
                        case 4:
                            bitmapMatrix.postRotate(180);
                            heightMultiplier = -1;
                            break;  // bottom left
                        case 5:
                            bitmapMatrix.postRotate(90);
                            heightMultiplier = -1;
                            break;  // left top
                        case 6:
                            bitmapMatrix.postRotate(90);
                            break;  // right top
                        case 7:
                            bitmapMatrix.postRotate(270);
                            heightMultiplier = -1;
                            break;  // right bottom
                        case 8:
                            bitmapMatrix.postRotate(270);
                            break;  // left bottom
                        default:
                            break;  // Unknown
                    }
                    break;
                } catch (MetadataException e) {
                    handleException(e, subscriber, uri, inputStream, mFinalPath, fromGallery);
                    return;
                }
            }
        }
    }

} catch (ImageProcessingException | IOException e) {
    handleException(e, subscriber, uri, inputStream, mFinalPath, fromGallery);
    return;
}

欢迎任何想法。

从一些额外的资源来看,Glide 似乎真的会自动处理这个问题。