2015-08-18 11 views
6

Görüntüleri kodlamak için Base64 kullanan bir Android uygulaması var ve kodlanmış diziler bir sunucuda depolanıyor. Şimdi aynı uygulama için bir iOS istemcisi yapıyorum ve aynı şekilde görüntüleri kodlamak için mücadele ediyorum android sonunda kodlanmış görüntüler Swift iOS içinde çözülecek ama Swift kodlanmış resimler Android içinde decode DEĞİL, ya da burada http://www.freeformatter.com/base64-encoder.html (Ortaya çıkan dosya Android'de Swift'de kodlamada Base64 kodlaması Android'de kod çözülmez

iOS

yılında deşifre OLACAK iOS kodlanmış geçerli bir resim)

Görüntüler değil, ben kodlamak ve

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; 
} 

deşifre aşağıdaki ve aşağıdaki kullanıyorum iOS tarafı

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 
} 

} Ben

Örnek çalışmasını sağlamak için müşteri ya değiştirmeye hazırım

: o http://pastebin.com/D41Ldjis

Ve üzere kodlar Android'te örnek https://pbs.twimg.com/profile_images/522909800191901697/FHCGSQg0.png

için bu görseli almak iOS'ta http://pastebin.com/fEUZSJvF

iOS'un çok daha büyük bir karakter sayısı var

+0

Ben hızlı gösterileri ile bu 'imageData.base64EncodedStringWithOptions (.allZeros görsem örnek)' – tyczj

+0

Ben dize fark çünkü çok i 76 çalıştı çalıştık @tyczj android tarafından üretilen her 76th karakter –

+0

yeni satırlar bir örnek ekle, veri hex dökümü ve Base64 dizesi. Onları görsel olarak karşılaştırdınız mı? Uzunluklar aynı mı? Aktarımda URL olarak kodlanmışlar mı? – zaph

cevap

3

Base64 provoided'i farklı PNG kodlamalarından. Başlıklar farklıdır, Android'in bir "sBIT" öğesi vardır ve iOS'un bir "sRGB" öğesi vardır. Bu nedenle sorun, Base64 değil, iki sistem tarafından önceden temsil edilen temsil niteliğidir.

Kod Çözme kısımları

Robot:
apng

IHDR †† ≠ zsBIT € · O ‡ ÑIDAT

IOS:
apng

IHDR »» ≠ XÆûsRGBÆŒÈiDOTd (ddp`ùıºIDAT

+0

Bunu nasıl çözerim? Birini diğerinin kodlamasını kullanmaya zorlamanın bir yolu var mı? –

+0

@zaph, ascii yerine hex değerleri daha iyi sağlar –

+0

Aslında bu, tam olarak sunmak istediğim şeydir. İlgilendiğim tek şey, ASCII: PNG, IHDR, sBIT, sRGB ve IDAT içindeki yığın etiketleridir. – zaph