无法在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 【问题描述】:

我有这段代码可以在 iosandroid 应用程序上将 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 字符串?

如何在 ios 中将 Base64 编码的 NSString 转换为字节数组(Java)?

如何在IOS中将视频文件转换为Base64字符串?

将base64URL解码为base64 - Swift

将图像从 ios swift 3 上传到 jsp Web 服务