Ho un'app per Android che utilizza Base64 per codificare le immagini e le stringhe codificate sono memorizzate su un server. Ora sto creando un client iOS per la stessa app e sto faticando a farlo codificare le immagini allo stesso modo Le immagini codificate su Android decodificheranno in Swift iOS ma le immagini codificate in Swift NON verranno decodificate in Android, o qui http://www.freeformatter.com/base64-encoder.html (il file risultante non è un'immagine valida)La codifica Base64 in Swift non decodifica in Android
immagini codificate in iOS decodifica in iOS
in Android, sto usando il seguente per codificare e decodificare
public static String encodeBitmap(Bitmap bitmap) {
Bitmap immagex = bitmap;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
immagex.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
return imageEncoded;
}
public static Bitmap decodeBitmap(String encodedString) {
byte[] decodedByte = Base64.decode(encodedString, Base64.DEFAULT);
Bitmap b = BitmapFactory.decodeByteArray(decodedByte, 0,
decodedByte.length);
return b;
}
e quanto segue sul Lato iOS
static func decodeImage(str: String) -> UIImage?{
if let decodedData = NSData(base64EncodedString: str, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters){
var iconValue:UIImage? = UIImage(data: decodedData)
return iconValue
}
return nil
}
static func encodeImage(image: UIImage) -> String{
var imageData = UIImagePNGRepresentation(image)
let base64 = imageData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding76CharacterLineLength)
return base64
}
}
Sono disposto a cambiare sia il programma e farlo funzionare
Esempio: prendere questa immagine per esempio https://pbs.twimg.com/profile_images/522909800191901697/FHCGSQg0.png
Su Android esso codifica per http://pastebin.com/D41Ldjis
E su iOS a http://pastebin.com/fEUZSJvF
iOS uno ha un numero di caratteri molto più grande
ogni esempio vedo con spettacoli Swift Questo 'imageData.base64EncodedStringWithOptions (.allZeros)' – tyczj
@tyczj Ho provato anche questo, ho provato 76 perché ho notato la stringa prodotto da Android ha nuove linee ogni 76 ° carattere –
Aggiungere un esempio, dump esadecimale dati e stringa Base64. Li hai paragonati visivamente? Le lunghezze sono le stesse? Sono codificati tramite URL durante il trasferimento? – zaph