无法在 iOS swift 中将 base64string 解码为 uiimage 但在 android 中工作正常
Unable to decode base64string to uiimage in iOS swift but working fine in android
我有这段代码可以在 iOS 和 Android 应用程序上将 UIImage
转换为 base64EncodedString
并从 base64EncodedString
转换回 UIImage
.
问题是当我将 UIImage
转换为 base64EncodedString
并发送到我的 android 设备时,它起作用了,
此外,当我从 android 设备接收到 base64EncodedString
到 IOS 时,此函数 imageFromBase64
将毫无问题地将其解码为 UIImage
。
但是当在 IOS 函数中将 UIImage
转换为 base64EncodedString
并尝试使用此函数 imageFromBase64
在 IOS 中对其进行解码时,它将 return 为零。
我有下面的代码将图像转换为 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);
Bellow 函数用于将 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 图像?
你做到了:
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
和
let imageData = Data(base64Encoded: base64, options: .init(rawValue: 0))
所以你添加了一个编码选项,而不是解码选项?那么“默认”解码是否有效?无需指定设置了特定选项?
让我们看看lineLength64Characters
的文档:
Set the maximum line length to 64 characters, after which a line ending is inserted.
让我们看看可用的文档 Data.Base64DecodingOptions
, especially .ignoreUnknownCharacters
:
Modify the decoding algorithm so that it ignores unknown non-Base-64 bytes, including line ending characters.
看到了吗?
在解码时使用 .ignoreUnknownCharacters
而不是 .init(rawValue:0)
(顺便说一句,可以用 []
简化,或者干脆不放置参数,因为 []
是它的默认值值)。
我有这段代码可以在 iOS 和 Android 应用程序上将 UIImage
转换为 base64EncodedString
并从 base64EncodedString
转换回 UIImage
.
问题是当我将 UIImage
转换为 base64EncodedString
并发送到我的 android 设备时,它起作用了,
此外,当我从 android 设备接收到 base64EncodedString
到 IOS 时,此函数 imageFromBase64
将毫无问题地将其解码为 UIImage
。
但是当在 IOS 函数中将 UIImage
转换为 base64EncodedString
并尝试使用此函数 imageFromBase64
在 IOS 中对其进行解码时,它将 return 为零。
我有下面的代码将图像转换为 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);
Bellow 函数用于将 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 图像?
你做到了:
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
和
let imageData = Data(base64Encoded: base64, options: .init(rawValue: 0))
所以你添加了一个编码选项,而不是解码选项?那么“默认”解码是否有效?无需指定设置了特定选项?
让我们看看lineLength64Characters
的文档:
Set the maximum line length to 64 characters, after which a line ending is inserted.
让我们看看可用的文档 Data.Base64DecodingOptions
, especially .ignoreUnknownCharacters
:
Modify the decoding algorithm so that it ignores unknown non-Base-64 bytes, including line ending characters.
看到了吗?
在解码时使用 .ignoreUnknownCharacters
而不是 .init(rawValue:0)
(顺便说一句,可以用 []
简化,或者干脆不放置参数,因为 []
是它的默认值值)。