Imágenes rápidas de eencoding / deencoding para JSON

Soy un poco nuevo en la velocidad y necesito ayuda para codificar alguna image, ponerla en un JSON y después de recuperarla, decodificarla nuevamente en NSData y volver a crear la image en un controller de vista UIImage. Encontré esta image de conversión de Post a Base64 en iOS + Swift pero me quedo atascado con esta parte:

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.fromRaw(0)!)

porque el método fromRaw ya no está disponible.

Gracias por adelantado

Edición posterior: estoy usando swiftyJson para analizar la matriz y obtengo los datos de la image como esta:

 var base64String = arrayJson[0]["photo"].stringValue var imageString = base64String as NSString 

y después de eso estoy tratando de decodificarlo así:

 let decodedData = NSData(base64EncodedString: imageString, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) 

También intenté con rawValue en lugar de IgnoreUnknownCharacters. Ambos regresan nil. También probé con la base64String en lugar de imageString. La misma cosa.

En su lugar, puede hacer lo siguiente para hacer una cadena codificada base64 en un UIImage:

  //base64 string to NSData let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)) //NSData to UIImage var decodedIamge = UIImage(data: decodedData!) 

NSDataBase64EncodingOptions.fromRaw(0)! ahora se cambia a NSDataBase64DecodingOptions(rawValue: 0)

Para más detalles de encoding / deencoding, puedes visitar esta publicación: convertir entre cadena UIImage y Base64

Para codificar una image:

 let image = UIImage(...) let quality = 1.0 let data: NSData = UIImageJPEGRepresentation(image, quality)! 

Para decodificar una image:

 let decodedImage = UIImage(data: data) 

La razón por la que estos methods devuelven nula para usted podría ser que su base64string es una variante segura de URL y nombre de file, lo que significa que el carácter 62 (0x3E) se reemplaza por un "-" (signo less) y el carácter 63 (0x3F) se reemplaza por un " _ "(subrayado) como se señaló aquí alfabeto base64

Intenta replace el carácter _ con / y el carácter - con + en tu cadena.

Puede usar el siguiente código:

 base64string = base64string.stringByReplacingOccurrencesOfString("-", withString: "+", options: NSStringCompareOptions.LiteralSearch, range: nil) base64string = base64string.stringByReplacingOccurrencesOfString( "_" , withString: "/", options: NSStringCompareOptions.LiteralSearch, range: nil) 

También tenga en count la longitud correcta de la cadena. Tiene que ser un múltiplo de 4: eche un vistazo a esta cadena de respuesta rellenada .

NSData Class Reference: https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/index.html#//apple_ref/c/tdef/NSDataBase64DecodingOptions

NSDataBase64DecodingOptions:

 struct NSDataBase64DecodingOptions : RawOptionSetType { init(_ rawValue: UInt) init(rawValue rawValue: UInt) static var IgnoreUnknownCharacters: NSDataBase64DecodingOptions { get } } 

¿Has probado uno de los siguientes:

  • let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)!)
  • let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters)