2012-03-23 5 views
0

Ich versuche Base64 ein Bild für den Upload auf iOS zu kodieren, aber das dumme Ding hat keine Unterstützung eingebaut, also habe ich zwei Bibliotheken heruntergeladen und beide ausprobiert, aber Ich denke, sie geben die falschen Werte zurück (es sei denn, ich verstehe base64 noch weniger als ich glaube). This Website gibt eine lange Zeichenfolge, die mit diesem beginnt: /9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA Als ich die library ich heruntergeladen Verschlüsselung mit, beginnt es mit diesem: iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3 Ich bin 100% sicher, dass die erste richtig ist, denn wenn ich ein Testprogramm verwenden, das geschrieben wurde um den Server zu testen, ist es derselbe Code, den er auf den Server hochlädt und der Server entschlüsselt glücklich die Datei und speichert das Bild. Here ist das Testbild.Base64 in iPhone zurückgibt anderes Ergebnis als andere Tools

Grundsätzlich denke ich, dass ich eine andere Bibliothek für das iPhone/iPad bekommen muss. Eine andere seltsame Sache, die ich bemerkte, ist, dass für einige Bilder das = am Ende der Saite ist, und für andere nicht. Dafür gibt es drei Gründe.

1) Das iPhone ist nicht mehr voll Speicher und will es mir nicht sagen, es lädt nur was es hat.

2) wird die Bibliothek

gebrochen

3) Ich bin verwirrt und nicht base64

Irgendwelche Vorschläge verstehen?

EDIT: Das iPhone ist eigentlich der Simulator, also weiß ich nicht, ob es nicht genügend Speicher vor dem Computer wird. Ich weiß, der Android-Emulator nicht, aber ich bin mir nicht sicher über den iOS-Simulator.

+0

Sie meinen kodieren, nicht verschlüsseln. –

Antwort

5

Die iPhone-Ausgabe scheint zu einem PNG-Anfang pro Standard-Base64-Dekodierung (wie this one) zugeordnet zu sein. Die andere Option, die Sie anbieten (die ich auf '/ 9j/4Q + zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK' getrimmt hat, um eine gültige base64-Länge zu sein), beginnt mit FFD8, der JPEG-SOI-Markierung und enthält dann den Text Exif, also möchte ich sagen, dass es ein JPEG ist.

Ist es möglich, dass Sie versehentlich verschiedene Dateien zum Vergleich codiert haben?

Oh, schneller Tipp übrigens, wenn es Ihnen hilft, Ihre Arbeit zu testen - das iPhone hat Base-64-Decodierung eingebaut, aber nicht offensichtlich. Der Trick besteht darin, eine Daten-URL zu erstellen, die mit Base 64 codiert ist und eine NSData anfordert, sie zu laden. Z.B.

NSData *decodedData = [NSData dataWithContentsOfURL: 
    [NSURL URLWithString: 
     @"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]]; 

Wo die data:;base64, direkt von Ihren base64 Daten folgen.


Addendum, drei Jahre später: seit iOS 7 NSData hat direkt angeboten -initWithBase64EncodedString:options: so gibt es keine Notwendigkeit, eine Daten URL nicht mehr zu formulieren.

+0

Danke, daran hätte ich nie gedacht. Ich erhielt die Daten als PNG-Darstellung, obwohl es ein JPEG-Bild war. Ich bin dazu übergegangen, es als JPEG zu bekommen und jetzt funktioniert es großartig – nick

Verwandte Themen