2016-05-31 18 views
0

Ich habe eine UIImage und ich möchte es mit Base 64 zu codieren. Ich sende dann die Zeichenfolge an unseren Server.Base64Encoding von UIImage stimmt nicht

Unser Server dekodiert es mit btoa(). Es kann nicht richtig gemacht werden.

Nach dem Debugging haben wir herausgefunden, dass das Ergebnis der Kodierung/Dekodierung mit btoa()/atob() nicht zu NSData's passt, wenn ich von UIImage in NSData umwandle und dann kodiere.

Was seltsam ist, dass sie übereinstimmen, wenn ich die UIImage direkt lesen als NSDatadataWithContentsOfFile: anstelle von UIImage-NSData Umwandlung UIImagePNGRepresentation()

Mein Problem ist, dass ich soll eine imagepicker verwenden, die eine UIImage zurückgibt. Ich möchte das Bild nicht in Datei schreiben und dann direkt als NSData lesen. Es ist nicht effizient. Gibt es eine Möglichkeit, dies zu lösen?

Antwort

0

Versuchen Sie, diese für Base64-Kodierung:

+ (NSString*)base64forData:(NSData*)theData 
{ 
    const uint8_t* input = (const uint8_t*)[theData bytes]; 
    NSInteger length = [theData length]; 

    static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 

    NSMutableData* data = [NSMutableData dataWithLength:((length + 2)/3) * 4]; 
    uint8_t* output = (uint8_t*)data.mutableBytes; 

    NSInteger i; 
    for (i=0; i < length; i += 3) { 
     NSInteger value = 0; 
     NSInteger j; 
     for (j = i; j < (i + 3); j++) { 
      value <<= 8; 

      if (j < length) { 
       value |= (0xFF & input[j]); 
      } 
     } 

     NSInteger theIndex = (i/3) * 4; 
     output[theIndex + 0] =     table[(value >> 18) & 0x3F]; 
     output[theIndex + 1] =     table[(value >> 12) & 0x3F]; 
     output[theIndex + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; 
     output[theIndex + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; 
    } 

    return [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] ; 
} 
+0

Der Fehler ist noch vorhanden. Ich denke, mit der Konvertierung von UIImage in NSData läuft etwas falsch. Einige Daten können verloren gehen oder etwas. Gibt es eine andere Möglichkeit, das UIImage zu NSData anders als UIImagePNGRepresentation() zu konvertieren? – cessmestreet

+0

Andere ist UIImageJPEGRepräsentation. –