2016-12-05 6 views
6

이 코드는 스위프트 3에서 더 이상 작동하지 않습니다.base64 데이터를 이미지로 디코딩

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

그래서 이것은 하나입니다.

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

Swift 3 당신은 NSData 대신에 Data를 사용해야합니다. –

+0

'경우 imageData의 = 데이터 보자 (base64Encoded : base64EncodedImageString, 옵션 : .ignoreUnknownCharacters), 하자 이미지 =있는 UIImage (자료 : imageData의) { 인쇄 (image.size) 가} ' –

+0

미디어 파일은 base64로 인코딩 된 문자로 구성된 문자열입니다 –

답변

12

도움이 될 것입니다 희망이 방법처럼 쓸 수 있습니다.

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

당신은

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

그것을 대신 3 네이티브 Data 직접 스위프트 NSData 사용을 사용하는 당신에게

4

스위프트

3.0 더 NS의 사용을 권유하지 스위프트뿐만 NSData와 동일한 경우

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

오브젝티브 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 :

때때로, 문자열 base64Encoded 반환 nildata:image/png;base64, 같은 접두사가 있습니다

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