Android BitmapFactory.decodeByteArray获取比iOS UIImage交换的照片宽度/高度

问题描述

我从服务器获取一个base64字符串,然后将其解析为图像,在Android端,图像旋转到270度,其宽度/高度比iOS端交换。任何想法?谢谢。这是代码: Android代码

val decodedByteArray: ByteArray = Base64.decode(base64Str,Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(decodedByteArray,decodedString.size)
Timber.i("image size: ${bitmap.width},${bitmap.height}")

iOS代码

 if let photoData = Data(base64Encoded: base64Str,options: .ignoreUnkNownCharacters),let photo = UIImage(data: photoData) {
        printLog("photo size: \(photo.size)")
        cell.ivPhoto.image = photo
 }

解决方法

使用任何base64到图像查看器检查图像base64数据。如果与上载相同。然后这可能是android事物,当它转换为base64时会旋转图像。因此,当您将base64转换为图像时,可以将图像旋转到特定角度或纵向。

,

Android Bitmapfactory不会旋转任何东西。

使用的ios代码使用方向信息旋转到原始位置。

例如,BitmapFactory不会查看jpg中的方向信息。图像可以位于任何位置,并且需要取向信息才能使其正确取向。

因此,在这种情况下,Android / BitmapFactory不会旋转或交换任何东西。

,

检查图像的 EXIF 标签中是否具有旋转角度。 Bitmapfactory 根本不执行任何EXIF旋转/转换。

使用ExifInterface类获取此类信息。记住要使用AndroidX变体,而不要使用不推荐使用的框架。

如果是这种情况,则必须根据EXIF角度旋转图像。 此操作将需要创建一个新的位图,因此,为了避免潜在的OutOfMemoryError,请使用此link中提供的一些技巧。