ios - 编码/解码 base64 解码数据 = nil

标签 ios swift uiimage base64 nsdata

昨天我为此编写了一个工作代码,但我删除了它,当编写新代码时,有些事情真的很奇怪:

我用这种方式将其编码为图片:

let pictureData = UIImagePNGRepresentation(picture!)
let pictureToString64 = pictureData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

(我之前有JPEGRepresentation,但它不起作用,所以我尝试使用JPEG) 我通过获取 pic 64 来解码,我相信它具有正确的值。它以 iVBORw0KGgoAAAANSUhEUgAAAUAA(...)

开头
 let decodedData = NSData(base64EncodedString: pic64, options:NSDataBase64DecodingOptions(rawValue: 0))
 let decodedImage = UIImage(data: decodedData!)
 let pictureDataLocal = UIImageJPEGRepresentation(decodedImage!, 100)
                defaults.setObject(pictureDataLocal, forKey: "profilePicture")

问题是decodedData总是为零。为什么会发生这种情况?

最佳答案

我认为这与 NSDataBase64DecodingOptions 有关。

使用 NSDataBase64DecodingOptions.IgnoreUnknownCharacters 而不是 NSDataBase64DecodingOptions(rawValue: 0),我能够将 Base64 编码的字符串解码回 NSData,并根据该数据创建了一个 UIImage:

let picture = UIImage(named: "myImage")

let pictureData = UIImagePNGRepresentation(picture!)

let pictureToString64 = pictureData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

let decodedData = NSData(base64EncodedString: pictureToString64!, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
let decodedImage = UIImage(data: decodedData!)
let pictureDataLocal = UIImageJPEGRepresentation(decodedImage!, 100)

NSDataBase64DecodingOptions 继承自 OptionSetType,这就是您获得 rawValue 初始值设定项的原因。最好使用其中一种集合类型,而不是传递值。我在 header 中看到 NSDataBase64DecodingOptions 是结构中唯一的公共(public)变量,所以我尝试了它。

@available(iOS 7.0, *)
public struct NSDataBase64DecodingOptions : OptionSetType {
    public init(rawValue: UInt)

    // Use the following option to modify the decoding algorithm so that it ignores unknown non-Base64 bytes, including line ending characters.
    public static var IgnoreUnknownCharacters: NSDataBase64DecodingOptions { get }
}

关于ios - 编码/解码 base64 解码数据 = nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228172/

相关文章:

ios - 抛出异常的 Swift2 闭包

iphone - 加载 100 个 UIImages

ios - iTunes App Analytics 中缺少 iOS 7 应用程序使用数据?

ios - 我设置了它,但它不确认 UITableViewDataSource

ios - 动画切换 CollectionViewLayout

swift - iOS - 在导航栏的标题中添加图像和文本

iphone - 从 CMSampleBufferRef 创建的 UIImage 未显示在 UIImageView 中?

swift - 类型 'UIImage' 的值没有成员

ios - NSPredicate 对关系属性的计数

ios - Xcode 6 : storyboard size not changing when selecting w:Regular h:Regular from w:compact h:regular