2013-07-15 34 views
5

Tôi có tệp .png trong thư mục tài nguyên của mình (kích thước thực là 411 KB) Khi tôi chuyển đổi uiimage thành nsdata và thử truy cập tài sản dài, nó cho tôi sai giá trị.độ dài bất động sản trả về kích thước sai (byte) cho một hình ảnh

Mã ...

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 

Xin vui lòng cho tôi biết nếu có bất kỳ tài sản khác mà giúp ..


Vì vậy, đây là yêu cầu của tôi .... Tôi muốn biết kích thước của hình ảnh tôi chọn từ uimagepicker. Kích thước chính xác của hình ảnh khi tôi nhìn thấy nó trong công cụ tìm và kích thước được trả lại cho tôi sau khi chọn nó từ thư viện hoàn toàn khác ... Có bất kỳ tài sản nào khác có thể được sử dụng thay cho chiều dài không?

+2

631 Kb là lượng bộ nhớ mà imgData nhận được. Điều này không có liên quan trực tiếp đến cách hình ảnh được lưu trữ trong tập tin thực tế. Nếu bạn muốn lấy kích thước tệp, hãy sử dụng hệ thống tệp. –

+0

@RobvanderVeer độ dài dữ liệu rõ ràng và kích thước tệp sẽ có "mối quan hệ trực tiếp". Trong trường hợp này, chúng phải giống hệt nhau. Tức là, dữ liệu được đọc trực tiếp từ tập tin, mà nó không phải là. Do đó vấn đề. – matt3141

+0

@ matt3141 đầu tiên tôi đồng ý câu trả lời của bạn là đúng. Nhưng tập tin không chỉ được đọc vào bộ nhớ ở đây, nó được đọc và xử lý. Do đó mối quan hệ với lưu trữ tập tin không phải là 'trực tiếp'. –

Trả lời

1

thử điều này:

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

Ít nhất là giải thích những gì nó làm. –

+0

Không hoạt động đối với tôi .. – NSPratik

4

Bạn đang chuyển đổi một png để một jpeg, và kích thước tập tin rất khác nhau nên được mong đợi.

Nếu bạn muốn lấy kích thước tệp của hình ảnh gốc, png, hãy làm như sau.

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

Tại sao không chỉ yêu cầu hệ thống tệp có dung lượng lớn như thế nào? –

+0

@HotLicks Tôi đã giả định rằng poster không chỉ đơn thuần là kích thước tệp, vì nếu không thì anh ta có thể viết đơn giản 'int imageSize = 411000;' (xem xét gói không thể ghi được) – matt3141

0

Khi bạn tải hình ảnh bạn đã giải nén nó. Khi bạn tạo "imgData", hình ảnh không được giải nén với cùng một thuật toán. Sẽ không có lý do gì để mong đợi cả hai có cùng kích cỡ.