我有一个来自服务器的编码字符串,它是一个图像。 现在我想将该字符串解码为任何内容(UIImage),并将其设置为UIImageView 预先感谢
答案 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数据。