如何在Swift 4中将base64 ecoded字符串解码为UIimage?

时间:2018-09-27 11:20:29

标签: swift4

我有一个来自服务器的编码字符串,它是一个图像。 现在我想将该字符串解码为任何内容(UIImage),并将其设置为UIImageView 预先感谢

3 个答案:

答案 0 :(得分:2)

我正在使用以下扩展名:

extension UIImage: {
    convenience init?(base64 str: String) {
        guard let url = URL(string: str),
            let data = try? Foundation.Data(contentsOf: url),
            UIImage(data: data) != nil else { return nil }
        self.init(data: data)!
    }
}

那么您可以做:

let image = UIImage(base64: someString)

请注意,要使其正常工作,必须将base64字符串的格式设置为:data:image/png;base64,...(或将png替换为jpeg)。
如果您的base64字符串没有此前缀,则可以执行以下操作:

extension UIImage: {
    convenience init?(base64 str: String) {
        guard let data = try? Foundation.Data(base64Encoded: str),
            UIImage(data: data) != nil else { return nil }
        self.init(data: data)!
    }
}

额外功劳

您可以反转整个过程并将图像转换为base64字符串:

public enum ImageFormat {
    case png
    case jpeg
}
public func base64(format: ImageFormat, includingPrefix: Bool = true) -> String? {
    var imageData: Foundation.Data?
    switch format {
        case .png: imageData = self.pngData
        case .jpeg: imageData = self.jpegData
    }
    guard let data = imageData else { return nil }
    return "data:image/\((format));base64," + data.base64EncodedString()
}

答案 1 :(得分:1)

您可以执行以下操作:

let string: String = "YourBase64EncodedImageAsAString"

if let imageData = Data(base64Encoded: string), let image = UIImage(data: imageData) {
    //use image
}

答案 2 :(得分:0)

func base64ToImage(base64String: String?) -> UIImage{
        if (base64String?.isEmpty)! {
            return #imageLiteral(resourceName: "no_image_found")
        }else {
            // Separation part is optional, depends on your Base64String !
            let tempImage = base64String?.components(separatedBy: ",")
            let dataDecoded : Data = Data(base64Encoded: tempImage![1], options: .ignoreUnknownCharacters)!
            let decodedimage = UIImage(data: dataDecoded)
            return decodedimage!
        }
    }

您会将 args 传递给base64数据。