1

我有这段代码可以在iOS和Android 应用程序上相互UIImage转换。base64EncodedStringbase64EncodedStringUIImage

问题是当我转换UIImage并发base64EncodedString送到我的 android 设备时它可以工作,当我base64EncodedString从 android 设备接收到 IOS 时,此功能imageFromBase64UIImage毫无问题地解码它。但是当在 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);

波纹管功能是用来解码base64EncodedStringUIImage

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 图像?

4

1 回答 1

2

你做:

let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)

let imageData = Data(base64Encoded: base64, options: .init(rawValue: 0))

所以你为编码添加了一个选项,但没有为解码添加一个选项?那么“默认”解码是否有效?无需指定设置了特定选项吗?

让我们看看文档lineLength64Characters

将最大行长度设置为 64 个字符,然后插入行尾

让我们看看 available 的文档Data.Base64DecodingOptions,尤其是.ignoreUnknownCharacters

修改解码算法,使其忽略未知的非 Base-64 字节,包括行尾字符

看?

使用.ignoreUnknownCharacterswhile 解码代替.init(rawValue:0)(顺便说一下,可以使用 简化[],或者根本不放置参数,因为[]它是默认值)。

于 2021-01-25T15:09:22.217 回答