如何在KB中获取UIImage的大小?

有没有办法从一个UIImage,而不是从didFinishPickingMediaWithInfo获取该图像的KB文件大小? 所呈现的图像来自相册。

我试过下面的代码,但是这给出了以下结果: 图像的大小KB:0.000000

- (void)setImage:(UIImage *)image { _image = image; self.imageView.image = image; } - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setupView]; self.backgroundColor = [UIColor whiteColor]; panGestureRecognizer = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(beingDragged:)]; [self addGestureRecognizer:panGestureRecognizer]; // prepare image view self.imageView = [[UIImageView alloc]initWithFrame:self.bounds]; self.imageView.clipsToBounds = YES; self.imageView.contentMode = UIViewContentModeScaleAspectFill; [self addSubview:self.imageView]; NSData *imgData = [[NSData alloc] initWithData:UIImageJPEGRepresentation((_image), 0.5)]; int imageSize = imgData.length; NSLog(@"size of image in KB: %f ", imageSize/1024.0); overlayView = [[OverlayView alloc]initWithFrame:CGRectMake(self.frame.size.width/2-100, 0, 100, 100)]; overlayView.alpha = 0; [self addSubview:overlayView]; } return self; } 

以下是计算您的HomeDirectory或Documents中文件大小的示例:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"yourimagename.png"] 

文件sie是计算的:

  filesize = [[[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil] fileSize]; NSLog(@"%lld",filesize); 

在添加文件大小之前,可以将其添加到.m文件中

 @interface ViewController () { long long filesize; } 

这将导致字节,如果您试图将这些字节转换为kb,您可以使用NSByteCountFormatter,它会照顾你所有的math:

  NSByteCountFormatter *sizeFormatter = [[NSByteCountFormatter alloc] init]; sizeFormatter.countStyle = NSByteCountFormatterCountStyleFile; 

然后像这样调用它:

 [sizeFormatter stringFromByteCount:filesize] 

如果图像未保存在磁盘上,则可以通过以下方式计算大小:

 NSData *imgData = UIImageJPEGRepresentation(_image, 1); filesize = [imgData length]; //filesize in this case will be an int not long long so use %d to NSLog it 

initWithFrame:setImage:被调用之前运行,所以_image在你计算的时候是零。 你可以将它们移动到setImage: function …

但是,这是测量图像大小的一种奇怪的方式。 一个JPEG文件和最终在graphics内存中的内容是截然不同的,所以如果你正在进行分析的原因,这不会给你任何准确的测量。 如果你只是想在磁盘上的大小,你可以简单地通过NSFileManager检查。