Ответ 1
Попробуйте использовать следующий код:
NSData *imageData = [[NSData alloc] initWithData:UIImageJPEGRepresentation((image), 1.0)];
int imageSize = imageData.length;
NSLog(@"SIZE OF IMAGE: %i ", imageSize);
Я пытаюсь выбрать изображение из библиотеки фотографий или с камеры.
Метод делегата:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
Дает мне объект UIImage
. Мне нужно найти размер изображения в bytes
для моего приложения.
Есть ли способ получить тип файла изображения, а также размер в байтах?
Любая помощь будет высоко оценена.
Заранее спасибо
Попробуйте использовать следующий код:
NSData *imageData = [[NSData alloc] initWithData:UIImageJPEGRepresentation((image), 1.0)];
int imageSize = imageData.length;
NSLog(@"SIZE OF IMAGE: %i ", imageSize);
Я знаю, что это старый вопрос, но создание объекта 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:
Растровое (или выборочное) изображение представляет собой прямоугольный массив пикселей, с каждый пиксель, представляющий один образец или точку данных в источнике изображение.
В некотором роде размер, полученный таким образом, дает вам информацию о наихудшем сценарии без фактического создания дорогого дополнительного объекта.
Базовые данные UIImage
могут варьироваться, поэтому для одного и того же "изображения" могут быть разные размеры данных. Единственное, что вы можете сделать, это использовать UIImagePNGRepresentation
или UIImageJPEGRepresentation
, чтобы получить эквивалентные конструкторы NSData
, а затем проверить размер этого.
UIImage *img = [UIImage imageNamed:@"sample.png"];
NSData *imgData = UIImageJPEGRepresentation(img, 1.0);
NSLog(@"Size of Image(bytes):%d",[imgData length]);
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)editInfo{
UIImage *image=[editInfo valueForKey:UIImagePickerControllerOriginalImage];
NSURL *imageURL=[editInfo valueForKey:UIImagePickerControllerReferenceURL];
__block long long realSize;
ALAssetsLibraryAssetForURLResultBlock resultBlock=^(ALAsset *asset)
{
ALAssetRepresentation *representation=[asset defaultRepresentation];
realSize=[representation size];
};
ALAssetsLibraryAccessFailureBlock failureBlock=^(NSError *error)
{
NSLog(@"%@", [error localizedDescription]);
};
if(imageURL)
{
ALAssetsLibrary *assetsLibrary=[[[ALAssetsLibrary alloc] init] autorelease];
[assetsLibrary assetForURL:imageURL resultBlock:resultBlock failureBlock:failureBlock];
}
}