我有一个 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(ddp`ùıºIDAT
关于android - Swift 中的 Base64 编码不会在 Android 中解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32082525/