[英]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.