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

标签 android ios image swift base64

我有一个 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/

相关文章:

php - 不使用 ImageMagick 从 SVG XML 创建 PNG

java - 使用 GAE Image API 进行图像转换

javascript - Jquery 和 Wordpress : The image file never shows up?

android - 2021 年在 Android 中加密字符串的最佳和最安全的方法是什么?

android - 我在哪里可以找到 Unity 中的构建系统选项?

java - 安卓工作室 : Application crashes at start

ios - 我如何知道什么时候已将某些内容粘贴到 UIWebView 中?

ios - 如何在 xcode 8.2.1 中生成新的 ipa 文件?

Android - 谷歌分析。跟踪 Activity View

ios - 将正确的图像传递给 uitableviewcell 的问题