2016-12-05 108 views
6

此代码不再适用于Swift 3。将base64数据解码为图像

imageData = NSData(base64EncodedString: mediaFile, options: NSDataBase64DecodingOptions.fromRaw(0)!) 

这是一个。

imageData = NSData(base64EncodedString: mediaFile, options: .allZeros) 
+1

Swift 3你应该使用数据而不是NSData。 –

+0

'如果让的imageData =数据(base64Encoded:base64EncodedImageString,选择:.ignoreUnknownCharacters) 设图像= UIImage的(数据:为imageData){ 打印(image.size) } ' –

+0

媒体文件是由base64编码字符的字符串 –

回答

12

而不是使用NSData直接使用斯威夫特3原生Data的。

if let decodedData = Data(base64Encoded: mediaFile, options: .ignoreUnknownCharacters) { 
    let image = UIImage(data: decodedData) 
} 
1

你可以写这样的方式

let data = NSData(base64Encoded: mediaFile, options: NSData.Base64DecodingOptions(rawValue: 0)) 

希望它会帮助你

4

夫特

夫特3.0不推荐使用NS任何更多,并与NSData相同情况下,也

if let decodedImageData = Data(base64Encoded: mediaFile, options: .ignoreUnknownCharacters) { 
     let image = UIImage(data: decodedImageData) 
    } 

在Objective-C

NSURL *url = [NSURL URLWithString:base64String];  
NSData *decodedImageData = [NSData dataWithContentsOfURL:url]; 
UIImage *image = [UIImage imageWithData:decodedImageData]; 
2

我实现这个作为的UIImage扩展

extension UIImage { 

    /* 
    @brief decode image base64 
    */ 
    static func decodeBase64(toImage strEncodeData: String!) -> UIImage { 

     if let decData = Data(base64Encoded: strEncodeData, options: .ignoreUnknownCharacters), strEncodeData.characters.count > 0 { 
      return UIImage(data: decData)! 
     } 
     return UIImage() 
    } 
} 
2

swift4:

有时,字符串中有作为data:image/png;base64,前缀,这将使得base64Encoded回报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 

    } 
} 

全码:

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)!) 
      } 
     } catch let error { 
      print("invalid regex: \(error.localizedDescription)") 
      return [] 
     } 
    } 
} 


let result = text.matches(for: "data:image\\/([a-zA-Z]*);base64,([^\\\"]*)") 
for imageString in result { 
    autoreleasepool { 
     let image = imageString.base64ToImage() 
     } 
    } 
} 
+0

只能工作的解决方案。感谢你! – LinusGeffarth