2013-03-27 13 views
8

Ich nahm ein 13,3 MB-Bild und fügte es zu XCode. Ich bin mir bewusst, dass XCode beim Kompilieren einige Tricks vornimmt, um die Dateigröße zu reduzieren. Ich tat dies, zu testen, wie groß das Bild nun war, nachdem sie in Daten umgewandelt werden:Inaccurate NSData Größe in Bytes

UIImage *image = [UIImage imageNamed:@"image.jpg"]; 
NSData *data = UIImageJPEGRepresentation(image, 1.0); 
NSLog(@"length: %i", data.length); 

Die Länge ich zurück war 26758066. Wenn das in Bytes ist, dann liest es sich für mich als 26.7MB. Wie ist das Bild plötzlich so groß? Gibt es eine andere Möglichkeit für mich, das Bild in Datenform zu bekommen, ohne zuerst durch UIImage zu gehen?

EDIT: Weitere Tests zeigen, dass dies funktioniert, und bringt eine Datenlänge von ~ 13.3MB aus - die erwarteten Menge:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]; 
NSData *data = [NSData dataWithContentsOfFile:filePath]; 
NSLog(@"length: %i", data.length); 
+0

Gibt es einen bestimmten Grund, warum Sie die 'NSData' des Bildes möchten? –

+1

Wenn Sie Ihre Frage beantwortet haben, machen Sie bitte eine Antwort und markieren Sie sie als korrekt. –

+0

@NathanWhite 1. Ich möchte die NSData, damit ich einige Dinge zur Speichernutzung in einer Test-App testen kann. 2. Die erste Frage bleibt immer noch - Warum gibt UIImageJPEGRepräsentation ein Bild zurück, das doppelt so groß ist wie das erste? – Andrew

Antwort

7

Was als Ihr Code tut, um das Bild in den Speicher zu dekomprimieren und dann recompressing JPEG, mit dem höchsten Qualitätsverhältnis (q=1.0). Deshalb ist das Bild plötzlich so groß.

Wenn Sie die im Ressourcenpaket gespeicherte Datei überprüfen möchten, fragen Sie NSBundle nach dem vollständigen Dateipfad und verwenden Sie NSFileManager, um die Dateigröße zu lesen. Sie können die gleiche Sache von Hand auf Ihrem Mac tun, werfen Sie einfach einen Blick in die BUILD_PRODUCTS_DIR für Ihr Projekt.