Ios length属性为图像返回错误的大小(字节)

Ios length属性为图像返回错误的大小(字节),ios,uiimage,Ios,Uiimage,我的资源文件夹中有一个.png文件。(实际大小为411KB) 当我将uiimage转换为nsdata并尝试访问length属性时,它给了我错误的值 代码 UIImage *image = [UIImage imageNamed:@"sample.png"]; NSData *imgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation(image, 1.0)]; int imageSize = imgData.length

我的资源文件夹中有一个.png文件。(实际大小为411KB) 当我将uiimage转换为nsdata并尝试访问length属性时,它给了我错误的值

代码

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
请告诉我是否还有其他有帮助的财产


这是我的要求。。。。 我想知道我从uimagepicker拾取的图像的大小。当我在finder中看到图像时,它的确切大小与从库中拾取后返回给我的大小完全不同。。。是否有其他属性可以代替长度使用?

尝试以下方法:

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

您正在将png转换为jpeg,因此需要不同的文件大小

如果希望获得原始png图像的文件大小,请执行以下操作

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

加载图像时,您将其解压缩。创建“imgData”时,图像没有使用相同的算法进行重新压缩。没有理由期望两者具有相同的大小。

631KB是imgData占用的内存量。这与图像在实际文件中的存储方式没有直接关系。如果要获取文件大小,请使用文件系统。@robvandervier显然,数据长度和文件大小有“直接关系”。在这种情况下,它们应该完全相等。也就是说,数据是直接从文件中读取的,而不是。因此问题就来了。@matt3141首先我同意你的答案是正确的。但是文件在这里不仅仅被读入内存,它被读取和处理。因此,与文件存储的关系不是“直接的”。@RobvanderVeer好的,我们在同一页上。不过,我会说,我不明白JPEG怎么会比PNG大得多。@matt3141,文件更大,因为
uijpegresentation
的第二个参数是1.0;它是压缩因子。至少解释一下它的作用。为什么不直接问文件系统文件有多大?@HotLicks我假设海报想要的不仅仅是文件大小,否则他只需写
int imageSize=411000(考虑到捆绑包不可写)