2013-07-15 7 views
5

Ho un file .png nella mia cartella delle risorse. (La dimensione effettiva è 411 KB) Quando converto l'uiimage in nsdata e provo ad accedere alla proprietà length, mi dà torto valore.restituisce la dimensione errata (byte) per un'immagine

Codice ...

UIImage *image = [UIImage imageNamed:@"sample.png"]; 

NSData *imgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(image, 1.0)]; 
int imageSize = imgData.length; 
NSLog(@"Image size in KB is %d",imageSize/1024); //-------- returns 631 KB 

Si prega di farmi sapere se c'è qualche altra proprietà che aiuta ..


ecco la mia richiesta .... Voglio sapere la dimensione dell'immagine che prendo da uimagepicker. La dimensione esatta dell'immagine quando la vedo nel mirino e la dimensione che mi viene restituita dopo averla presa dalla libreria è totalmente diversa ... Esiste qualche altra proprietà che può essere usata al posto della lunghezza?

+2

631 Kb è la quantità di memoria utilizzata da imgData. Questo non ha una relazione diretta con il modo in cui l'immagine è memorizzata nel file reale. Se vuoi ottenere la dimensione del file, usa il filesystem. –

+0

@RobvanderVeer chiaramente la lunghezza dei dati e le dimensioni del file avrebbero una "relazione diretta". In questo caso dovrebbero essere esattamente uguali. Cioè, sono stati letti i dati direttamente dal file, che non è. Da qui il problema. – matt3141

+0

@ matt3141 per prima cosa sono d'accordo che la tua risposta sia quella giusta. Ma il file non è solo letto in memoria qui, viene letto ed elaborato. Quindi la relazione con lo storage di file non è 'diretta'. –

risposta

1

provare questo:

unsigned int len = [data length]; 
uint32_t little = (uint32_t)NSSwapHostIntToLittle(len); 
NSData *byteData = [NSData dataWithBytes:&little length:4]; 
+1

Almeno spiega cosa fa. –

+0

Non funziona per me .. – NSPratik

4

si sta convertendo un png a jpeg, e le dimensioni del file in modo diverso dovrebbe essere previsto.

Se si desidera ottenere la dimensione del file dell'immagine originale, png, effettuare quanto segue.

NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"]; 
NSData *rawData = [NSData dataWithContentsOfFile:path]; 
NSLog(@"%d", rawData.length); 
+0

Perché non chiedere al file system quanto è grande il file? –

+0

@HotLicks Avevo pensato che il poster volesse più della dimensione del file, altrimenti poteva semplicemente scrivere 'int imageSize = 411000;' (considerando che il pacchetto non è scrivibile) – matt3141

0

Quando hai caricato l'immagine lo hai decompresso. Quando hai creato "imgData" l'immagine non è stata ricompressa con lo stesso algoritmo. Non ci sarebbe ragione di aspettarsi che i due abbiano le stesse dimensioni.