如何在iOS 4.0+中以字节为单位获取UIImage的大小?

dev*_*sri 11 iphone objective-c uiimageview uiimage ios

我试图从照片库或相机中选择一张图像.
委托方法:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
Run Code Online (Sandbox Code Playgroud)

给我一个UIImage对象.我需要bytes为我的应用程序找到图像的大小.

有什么办法可以获得图像的文件类型以及字节大小吗?

任何形式的帮助将受到高度赞赏.

提前致谢

Asi*_* AP 35

请尝试以下代码:

NSData *imageData = [[NSData alloc] initWithData:UIImageJPEGRepresentation((image), 1.0)];

int imageSize = imageData.length;
NSLog(@"SIZE OF IMAGE: %i ", imageSize);
Run Code Online (Sandbox Code Playgroud)

  • UIImageJPEGRepresentation中为压缩质量传递的正确值应该是多少?我在这里看到0.5,这使得我的计算尺寸小于原来的1并且使它更大. (2认同)

Rok*_*arc 17

我知道这是一个老问题但是创建一个NSData对象只是为了获得图像的字节大小可能是一个非常昂贵的操作.图像可以有超过20Mb并创建相同大小的对象只是为了获得第一个的大小...

我倾向于使用这个类别:

的UIImage + CalculatedSize.h

#import <UIKit/UIKit.h>

@interface UIImage (CalculatedSize)

-(NSUInteger)calculatedSize;

@end
Run Code Online (Sandbox Code Playgroud)

的UIImage + CalculatedSize.m

#import "UIImage+CalculatedSize.h"

@implementation UIImage (CalculatedSize)

-(NSUInteger)calculatedSize
{    
    return CGImageGetHeight(self.CGImage) * CGImageGetBytesPerRow(self.CGImage);
}

@end
Run Code Online (Sandbox Code Playgroud)

您只需导入UIImage+CalculatedSize.h并使用它,如下所示:

NSLog (@"myImage size is: %u",myImage.calculatedSize);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想避免使用类别:

NSUInteger imgSize  = CGImageGetHeight(anImage.CGImage) * CGImageGetBytesPerRow(anImage.CGImage);
Run Code Online (Sandbox Code Playgroud)

编辑:

此计算当然与JPEG/PNG压缩无关.它涉及底层CGimage:

位图(或采样)图像是矩形像素阵列,每个像素表示源图像中的单个样本或数据点.

在某种程度上,以这种方式检索的大小可以为您提供最坏情况的方案信息,而无需实际创建昂贵的附加对象.