将base64数据解码为图像

Chr*_*sen 9 base64 uiimage nsdata swift3 xcode8

此代码不再适用于Swift 3.

imageData = NSData(base64EncodedString: mediaFile, options: NSDataBase64DecodingOptions.fromRaw(0)!)
Run Code Online (Sandbox Code Playgroud)

这是一个.

imageData = NSData(base64EncodedString: mediaFile, options: .allZeros)
Run Code Online (Sandbox Code Playgroud)

Nir*_*v D 18

而不是NSData直接使用Swift 3原生Data.

if let decodedData = Data(base64Encoded: mediaFile, options: .ignoreUnknownCharacters) {
    let image = UIImage(data: decodedData)
}
Run Code Online (Sandbox Code Playgroud)


hst*_*tdt 6

斯威夫特4.1

对于这种情况,有时string具有前缀data:image/png;base64将使base64Encodedreturn nil

extension String {

    func base64ToImage() -> UIImage? {

        if let url = URL(string: self),let data = try? Data(contentsOf: url),let image = UIImage(data: data) {
            return image
        }

        return nil

    }
}
Run Code Online (Sandbox Code Playgroud)

演示代码:

extension String {

    func matches(for regex: String) -> [String] {

        do {
            let regex = try NSRegularExpression(pattern: regex)
            let results = regex.matches(in: self, range:  NSRange(self.startIndex..., in: self))
            return results.map {
                //self.substring(with: Range($0.range, in: self)!)
                String(self[Range($0.range, in: self)!])
            }
        } catch let error {
            print("invalid regex: \(error.localizedDescription)")
            return []
        }
    }
}


let results = text.matches(for: "data:image\\/([a-zA-Z]*);base64,([^\\\"]*)")
for imageString in results {
    autoreleasepool {
        let image = imageString.base64ToImage()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)