繁体   English   中英

用于JSON的Swift编码/解码图像

[英]Swift encoding/decoding images for JSON

我是swift的新手,我需要一些帮助来编码一些图像,将它放入JSON中并在检索之后,将其解码回NSData并在UIImage视图控制器中重新创建图像。 我发现这篇文章在iOS + Swift中将图像转换为Base64字符串,但我对此部分感到困惑:

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.fromRaw(0)!)

因为fromRaw方法不再可用。

提前致谢

稍后编辑:我正在使用swiftyJson来解析数组,我得到的图像数据如下:

var base64String = arrayJson[0]["photo"].stringValue
var imageString = base64String as NSString

之后,我试图像这样解码它:

let decodedData = NSData(base64EncodedString: imageString, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)

我也尝试过使用rawValue而不是IgnoreUnknownCharacters。 两者都归零。 还尝试使用base64String而不是imageString。 一样。

您可以执行以下操作,将base64编码的字符串转换为UIImage:

 //base64 string to NSData
 let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

//NSData to UIImage
var decodedIamge = UIImage(data: decodedData!)

NSDataBase64EncodingOptions.fromRaw(0)! 现在更改为NSDataBase64DecodingOptions(rawValue: 0)

有关更多编码/解码详细信息,您可以访问此文章: 在UIImage和Base64字符串之间进行转换

要对图像进行编码:

let image = UIImage(...)
let quality = 1.0
let data: NSData = UIImageJPEGRepresentation(image, quality)!

解码图像:

let decodedImage = UIImage(data: data)

这些方法为您返回nil的原因可能是您的base64string是一个URL和Filename安全变体,意味着字符62(0x3E)被替换为“ - ”(减号)而字符63(0x3F)被替换为“ _“(下划线),如此处所示base64字母表

尝试使用/和字符替换字符_ -在字符串中使用+

您可以使用以下代码:

base64string = base64string.stringByReplacingOccurrencesOfString("-", withString: "+", options: NSStringCompareOptions.LiteralSearch, range: nil)
base64string = base64string.stringByReplacingOccurrencesOfString( "_" , withString: "/", options: NSStringCompareOptions.LiteralSearch, range: nil)

还要注意字符串的正确长度。 它必须是4的倍数 - 看看这个答案填充字符串

NSData类参考: https//developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/index.html#//apple_ref/c/tdef/NSDataBase64DecodingOptions

NSDataBase64DecodingOptions:

struct NSDataBase64DecodingOptions : RawOptionSetType {
    init(_ rawValue: UInt)
    init(rawValue rawValue: UInt)
    static var IgnoreUnknownCharacters: NSDataBase64DecodingOptions { get }
}

您是否尝试过以下其中一项:

  • let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)!)
  • let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM