gpt4 book ai didi

android - Swift 中的 Base64 编码不会在 Android 中解码

转载 作者:搜寻专家 更新时间:2023-10-30 21:58:28 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,它使用 Base64 对图像进行编码,编码后的字符串存储在服务器上。我现在正在为同一个应用程序制作一个 iOS 客户端,并且正在努力使其以相同的方式编码图像在 android 端编码的图像将在 Swift iOS 中解码,但在 Swift 中编码的图像将不会在 Android 中解码,或此处 http://www.freeformatter.com/base64-encoder.html (生成的文件不是有效图像)

在 iOS 中编码的图像将在 iOS 中解码

在 Android 中,我使用以下代码进行编码和解码

public static String encodeBitmap(Bitmap bitmap) {
Bitmap immagex = bitmap;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immagex.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
return imageEncoded;
}

public static Bitmap decodeBitmap(String encodedString) {
byte[] decodedByte = Base64.decode(encodedString, Base64.DEFAULT);
Bitmap b = BitmapFactory.decodeByteArray(decodedByte, 0,
decodedByte.length);
return b;
}

iOS 端如下

static func decodeImage(str: String) -> UIImage?{
if let decodedData = NSData(base64EncodedString: str, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters){
var iconValue:UIImage? = UIImage(data: decodedData)
return iconValue
}
return nil
}

static func encodeImage(image: UIImage) -> String{
var imageData = UIImagePNGRepresentation(image)
let base64 = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding76CharacterLineLength)
return base64
}

我愿意改变任何一个客户端以使其工作

例子:以这张图片为例 https://pbs.twimg.com/profile_images/522909800191901697/FHCGSQg0.png

在 Android 上它编码为 http://pastebin.com/D41Ldjis

在 iOS 上为 http://pastebin.com/fEUZSJvF

iOS 的字符数要多得多

最佳答案

所提供的 Base64 来自不同的 PNG 编码。 header 不同,Android 有一个“sBIT” block ,而 iOS 有一个“sRGB” block 。

因此问题不在于Base64,而在于两个系统提供的表示形式。

解码部分

Android:
âPNG

IHDR††≠zsBIT€·O‡ÑIDAT

iOS:
âPNG

IHDR»»≠XÆûsRGBÆŒÈiDOTd(ddp`ùıºIDAT

关于android - Swift 中的 Base64 编码不会在 Android 中解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com