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

时间:2019-06-07 21:45:08

标签: android image image-resizing android-glide image-rotation

我是一位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;
}

任何想法都值得赞赏。

1 个答案:

答案 0 :(得分:0)

从某些其他资源中,听起来好像Glide实际上是自动处理此问题的。