2017-10-06 6 views
0

Je reçois la chaîne base64 avec l'extension et je veux convertir la chaîne base64 en GIF et l'afficher dans ImageView. J'utilise le fichier iOSDevCenters + GIF.swift. Je reçois NSData de chaîne, mais lorsque les données converties en images, son donnant nil.Below mon code:comment créer des GIF à partir de la chaîne base64 dans swift

let imageData = profileImageString.data(using: .utf8) 
self.thumbnailMedia.image = UIImage.gifImageWithData(imageData!) 

Est-ce que quelqu'un a des idées sur la façon de le faire?

+0

Obtenez-vous une chaîne dans une api JSON ou deviennent vous venez les données gif? –

Répondre

0

Si vous démarrez à partir d'une chaîne base64, vous devez la décoder en tant que chaîne base64 et non en UTF8.

if let data = Data(base64Encoded: imageDataString) { 
    let image = UIImage(data: data) 
} 

Cet extrait prend simplement la chaîne d'image encode, décode dans un objet Data et créer une image à partir des données.
Si vous travaillez beaucoup en utilisant la chaîne base64, je vous suggère fortement d'étendre les fonctionnalités de la structure String.

extension String { 
    //: ### Base64 encoding a string 
    func base64Encoded() -> String? { 
     if let data = self.data(using: .utf8) { 
      return data.base64EncodedString() 
     } 
     return nil 
    } 

    //: ### Base64 decoding a string 
    func base64Decoded() -> String? { 
     if let data = Data(base64Encoded: self) { 
      return String(data: data, encoding: .utf8) 
     } 
     return nil 
    } 
} 

Cet extrait a été prise de Github, crédits à Stringer.

également une autre méthode consiste à utiliser le extension créé par Leo Dabus qui est conforme à la convention Swift:

extension String { 
    var data:   Data { return Data(utf8) } 
    var base64Encoded: Data { return data.base64EncodedData() } 
    var base64Decoded: Data? { return Data(base64Encoded: self) } 
} 

extension Data { 
    var string: String? { return String(data: self, encoding: .utf8) } 
} 
+0

pas besoin de déplier vos données lors de la conversion de votre chaîne en données utf8. Il n'échouera jamais –

+1

Vous pouvez simplement utiliser 'Data (.utf8) .base64EncodedString()' et enlever facultatif du type de retour –

+0

Aussi vos méthodes n'ont aucun paramètre ainsi vous devriez leur faire des propriétés calculées vérifier ce https: // stackoverflow.com/questions/29365145/how-to-encode-string-to-base64-in-swift/43817935#43817935 –