Я знаю, что это старый вопрос, но создание объекта NSData
только для того, чтобы получить размер изображения в байтах, может быть очень дорогой операцией. Изображение может иметь размер более 20 МБ и создавать объекты одинакового размера, чтобы получить размер первого ...
Я склонен использовать эту категорию:
UIImage + CalculatedSize.h
#import <UIKit/UIKit.h>
@interface UIImage (CalculatedSize)
-(NSUInteger)calculatedSize;
@end
UIImage + CalculatedSize.m
#import "UIImage+CalculatedSize.h"
@implementation UIImage (CalculatedSize)
-(NSUInteger)calculatedSize
{
return CGImageGetHeight(self.CGImage) * CGImageGetBytesPerRow(self.CGImage);
}
@end
Вы просто импортируете UIImage+CalculatedSize.h
и используете его так:
NSLog (@"myImage size is: %u",myImage.calculatedSize);
Или, если вы хотите избежать использования категорий:
NSUInteger imgSize = CGImageGetHeight(anImage.CGImage) * CGImageGetBytesPerRow(anImage.CGImage);
EDIT:
Этот расчет, конечно, не имеет ничего общего со сжатием JPEG / PNG. Это относится к подложке CGimage :
Растровое (или дискретизированное) изображение представляет собой прямоугольный массив пикселей с
каждый пиксель представляет одну выборку или точку данных в источнике
изображение.
Таким образом, размер, полученный таким образом, дает вам информацию о сценарии наихудшего случая без фактического создания дорогого дополнительного объекта.