2013-03-27 12 views
8

Wziąłem 13,3 MB obrazu i dodałem go do XCode. Zdaję sobie sprawę, że podczas kompilacji XCode wykonuje pewne sztuczki, aby zmniejszyć rozmiar pliku. Zrobiłem to, aby sprawdzić, jak duży obraz był teraz, po tym przekształcono dane:Niedokładny rozmiar NSData podany w bajtach

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

Długość wróciłem był 26758066. Jeśli to jest w bajtach, to odczytuje mnie jako 26,7 MB. Jak nagle obraz jest tak duży? Czy istnieje inny sposób, aby uzyskać obraz w postaci danych bez uprzedniego przejścia przez UIImage?

EDIT: Dalsze badania pokazują, że to działa, i wydobywa długość wynoszącą ~ 13.3MB - przewidywaną kwotę:

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

Czy istnieje szczególny powód, dla którego chcesz "NSData" obrazu? –

+1

Jeśli odpowiedziałeś na swoje pytanie, proszę udzielić odpowiedzi i oznaczyć je jako prawidłowe. –

+0

@NathanWhite 1. Chcę NSData, aby przetestować niektóre rzeczy użycia pamięci w aplikacji testowej. 2. Pierwsze pytanie pozostaje nadal - dlaczego UIImageJPEGReprezentacja zwraca obraz dwukrotnie większy od pierwszego? – Andrew

Odpowiedz

7

Co robi Twój kod jest dekompresji obrazu do pamięci, a następnie jako recompressing JPEG, o najwyższym współczynniku jakości (q=1.0). Dlatego obraz jest nagle taki duży.

Jeśli chcesz sprawdzić plik jako zapisany w pakunku zasobów, zapytaj NSBundle o pełną ścieżkę pliku i użyj NSFileManager, aby odczytać rozmiar pliku. Możesz zrobić to samo ręcznie na Macu, po prostu zajrzyj do BUILD_PRODUCTS_DIR dla swojego projektu.