问题描述
我从服务器获取一个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中提供的一些技巧。