Mam aplikację na Androida, która używa Base64 do kodowania obrazów, a zakodowane ciągi są przechowywane na serwerze. Teraz robię klienta iOS dla tej samej aplikacji i próbuję zmusić go do kodowania obrazów w ten sam sposób. Obrazy zakodowane na końcu androida będą dekodować w Swift iOS, ale obrazy zakodowane w Swift NIE odszyfrują w systemie Android, lub tutaj http://www.freeformatter.com/base64-encoder.html (wynikowy plik nie jest prawidłowym obrazem)Kodowanie Base64 w Swift nie będzie dekodowane w Androidzie
obrazy zakodowane w iOS zdekodują w iOS
w Androidzie, używam następujących aby kodowania i dekodowania
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;
}
i po sprawie Strona 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
}
}
Jestem gotów zmienić dla klienta, aby to działało
Przykład: wziąć ten obraz np https://pbs.twimg.com/profile_images/522909800191901697/FHCGSQg0.png
Na Androidzie koduje do http://pastebin.com/D41Ldjis
I na iOS to http://pastebin.com/fEUZSJvF
System iOS ma znacznie większą liczbę znaków:
każdy przykład widzę z szybkimi To pokazuje 'imageData.base64EncodedStringWithOptions (.allZeros)' – tyczj
@tyczj Próbowałem że też próbowałem 76 bo zauważyłem ciąg wyprodukowany przez Androida ma nowe linie co 76. znak –
Dodaj przykład, zrzut danych hex i ciąg Base64. Porównałeś je wizualnie? Czy długości są takie same? Czy są one zakodowane przy przesyłaniu adresu URL? – zaph