无法在iOS swift中将base64string解码为uiimage,但在android中工作正常[重复]
Posted
技术标签:
【中文标题】无法在iOS swift中将base64string解码为uiimage,但在android中工作正常[重复]【英文标题】:Unable to decode base64string to uiimage in iOS swift but working fine in android [duplicate] 【发布时间】:2021-01-25 14:53:59 【问题描述】:我有这段代码可以在 ios 和 android 应用程序上将 UIImage
转换为 base64EncodedString
并从 base64EncodedString
转换回 UIImage
。
问题是当我将UIImage
转换为base64EncodedString
并发送到我的android 设备时它可以工作,
同样,当我从 android 设备接收到 IOS 的base64EncodedString
时,此功能imageFromBase64
将毫无问题地将其解码为UIImage
。
但是当在 IOS 函数中将 UIImage
转换为 base64EncodedString
并尝试在 IOS 中使用此函数 imageFromBase64
对其进行解码时,它将返回 nil。
我有以下代码将图像转换为base64EncodedString
if let image = info[.originalImage] as? UIImage
let thumb1 = image.resized(withPercentage: 0.3)
if let imageData = thumb1?.jpeg(.medium)
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
tryEmitMessage(message: strBase64)
我的android示例将位图转换为base64EncodedString
public static byte[] bitmapToByte(Bitmap bitmap)
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
return stream.toByteArray();
byte[] bm = BitmapUtils.bitmapToByte(bitmap_image);
String strBase64 = Base64.encodeToString(bm, Base64.NO_WRAP);
波纹管函数用于将base64EncodedString
解码为UIImage
func imageFromBase64 (base64:String) -> UIImage
let imageData = Data.init(base64Encoded: base64, options: .init(rawValue: 0))
let image = UIImage(data: imageData!)
return image!
let message = "base64 string"
dataView.uiimage_image = imageFromBase64(base64: message)
我的 android 示例将base64EncodedString
转换为位图
byte[] b = Base64.decode("base64 string", Base64.DEFAULT);
Bitmap bmp = BitmapFactory.decodeByteArray(b,0,b.length);
请知道如何在 iOS swift 中编码和解码 base64 图像?
【问题讨论】:
编码:options: .lineLength64Characters)
和解码:options: .init(rawValue: 0)
可能想用.ignoreUnknownCharacters
而不是init(rawValue: 0)
进行测试?
@Larme 它与ignoreUnknownCharacters
合作
【参考方案1】:
你这样做:
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
和
let imageData = Data(base64Encoded: base64, options: .init(rawValue: 0))
所以您添加了编码选项,但没有添加解码选项?那么“默认”解码是否有效?无需指定设置了特定选项?
我们看lineLength64Characters
的文档:
将最大行长度设置为 64 个字符,之后插入行尾。
让我们看看可用的Data.Base64DecodingOptions
的文档,尤其是.ignoreUnknownCharacters
:
修改解码算法,使其忽略未知的非 Base-64 字节,包括行尾字符。
看到了吗?
在解码时使用.ignoreUnknownCharacters
而不是.init(rawValue:0)
(顺便说一下,可以使用[]
进行简化,或者干脆不输入参数,因为[]
是它的默认值)。
【讨论】:
以上是关于无法在iOS swift中将base64string解码为uiimage,但在android中工作正常[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 3 中将 captureStillImageAsynchronously(sampleBuffer) 转换为 base64 编码
如何在 swift 2.0 中将 .pdf 文件转换为 base64 字符串?