Android BitmapFactory.decodeByteArray 获取照片 width/height 比 iOS UIImage(data:)

Android BitmapFactory.decodeByteArray get the photo width/height is exchanged than iOS UIImage(data:)

我从服务器得到一个base64字符串,然后我把它解析成图像,在Android这边,图像旋转了270度,它的width/height比[=23=交换了] 边。任何的想法?谢谢你。这是代码: Android代码:

val decodedByteArray: ByteArray = Base64.decode(base64Str, Base64.DEFAULT)
val bitmap = BitmapFactory.decodeByteArray(decodedByteArray, 0, 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 数据。如果和上传的一样。然后,当图像转换为 base64 图像时,可能会旋转图像的 android 东西。因此,当您将 base64 转换为图像时,您可以将图像旋转到特定角度或纵向。

Android Bitmapfactory 不旋转任何东西。

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

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

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

检查您的图片在其 EXIF 标签中是否有旋转角度。 Bitmapfactory 根本不执行任何 EXIF rotations/transformations。

使用ExifInterfaceclass获取此类信息。请记住使用 AndroidX 变体而不是已弃用的框架变体。

如果是这样,那么你必须根据EXIF角度旋转图像。 此操作将需要创建一个新的位图,因此为了避免潜在的 OutOfMemoryError, use some of the tips provided in this link.