web-dev-qa-db-ja.com

base64データを画像にデコードする

このコードは、Swift 3では機能しなくなりました。

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

これもそうです。

imageData = NSData(base64EncodedString: mediaFile, options: .allZeros)
11
Chris Mikkelsen

NSDataを使用する代わりに、直接Swift 3ネイティブDataを使用します。

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

Swift 4.1

この状況では、文字列にプレフィックスdata:image/png;base64が付いていると、base64Encodednilを返すことがあります。

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)!)
                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()
        }
    }
}
6
hstdt

Swift

Swift 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];
4

これを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
EgzonArifi

このように書けます

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

それがあなたを助けることを願っています

1