我对swift很新,我需要一些帮助来编码一些图像,将它放在JSON中并在检索之后,将其解码回NSData并在UIImage视图控制器中重新创建图像。 我发现了这篇文章Convert Image to Base64 string in iOS + Swift,但我对此部分感到困惑:
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。同样的事情。
答案 0 :(得分:9)
您可以执行以下操作,将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)
有关更多编码/解码详情,请访问以下帖子:Convert between UIImage and Base64 string
答案 1 :(得分:3)
编码图像:
let image = UIImage(...)
let quality = 1.0
let data: NSData = UIImageJPEGRepresentation(image, quality)!
解码图像:
let decodedImage = UIImage(data: data)
答案 2 :(得分:1)
这些方法为您返回nil的原因可能是您的base64string是一个URL和Filename安全变体,意味着字符62(0x3E)被替换为“ - ”(减号)并且字符63(0x3F)被替换使用“_”(下划线),如此处所述base64 alphabet
尝试将字符_
替换为/
,将字符-
替换为字符串中的+
。
您可以使用以下代码:
base64string = base64string.stringByReplacingOccurrencesOfString("-", withString: "+", options: NSStringCompareOptions.LiteralSearch, range: nil)
base64string = base64string.stringByReplacingOccurrencesOfString( "_" , withString: "/", options: NSStringCompareOptions.LiteralSearch, range: nil)
还要注意字符串的正确长度。它必须是4的倍数 - 看一下这个答案padded string。
答案 3 :(得分:0)
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)