长度属性为图像返回错误的大小(字节)
Posted
技术标签:
【中文标题】长度属性为图像返回错误的大小(字节)【英文标题】:length property returns wrong size(bytes) for an image 【发布时间】:2013-07-15 07:19:24 【问题描述】:我的资源文件夹中有一个 .png 文件。(实际大小为 411 KB) 当我将 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 中选择的图像的大小。当我在取景器中看到图像时,它的确切尺寸与从库中选择它后返回给我的尺寸完全不同......还有其他可以用来代替长度的属性吗?
【问题讨论】:
631 Kb 是 imgData 占用的内存量。这与图像在实际文件中的存储方式没有直接关系。如果要获取文件大小,请使用文件系统。 @RobvanderVeer 显然数据长度和文件大小将具有“直接关系”。在这种情况下,它们应该完全相等。也就是说,是否直接从文件中读取数据,而事实并非如此。因此问题。 @matt3141 首先我同意你的答案是正确的。但是文件在这里不仅仅是读入内存,它是被读取和处理的。因此,与文件存储的关系不是“直接的”。 @RobvanderVeer 好的,我们在同一页上。不过,我会说,我很困惑 JPEG 怎么会比 PNG 大得多。 @matt3141,文件更大,因为UIJPEGRepresentation
的第二个参数是1.0;它的压缩系数。 developer.apple.com/library/ios/#documentation/UIKit/Reference/…
【参考方案1】:
您正在将 png 转换为 jpeg,因此应该有不同的文件大小。
如果您希望获得原始 png 图像的文件大小,请执行以下操作。
NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"png"];
NSData *rawData = [NSData dataWithContentsOfFile:path];
NSLog(@"%d", rawData.length);
【讨论】:
为什么不直接问文件系统文件有多大? @HotLicks 我以为发帖者想要的不仅仅是文件大小,否则他可以简单地写int imageSize = 411000;
(考虑到捆绑包不可写)【参考方案2】:
试试这个:
unsigned int len = [data length];
uint32_t little = (uint32_t)NSSwapHostIntToLittle(len);
NSData *byteData = [NSData dataWithBytes:&little length:4];
【讨论】:
至少解释一下它的作用。【参考方案3】:当您加载图像时,您将其解压缩。当您创建“imgData”时,图像没有使用相同的算法重新压缩。没有理由期望两者具有相同的大小。
【讨论】:
以上是关于长度属性为图像返回错误的大小(字节)的主要内容,如果未能解决你的问题,请参考以下文章