Вопрос по ios – Как получить размер сжатого файла изображения, полученного из `UIImagePickerController`?

3

Я хочу знать размер изображения, сделанногоUIImagePickerController Камарой или библиотекой. Есть ли способ найти это?

Требование, как,

Если размер изображения превышает 1 МБ, я хочу сжать его.

заранее спасибо.

Ваш Ответ

4   ответа
1


CGFloat compression = 0.8f;
CGFloat maxCompression = 0.1f;
int maxFileSize = 1024;
UIImage *img =[UIImage imageNamed:@"anyimg.jpg"];
NSData *imageData = UIImageJPEGRepresentation(img, compression);

while ([imageData length] > maxFileSize && compression > maxCompression)
{
    compression -= 0.1;
    imageData = UIImageJPEGRepresentation(img, compression);
    NSLog(@"%d",[imageData length]);
}
NSLog(@"image size %d",[imageData length]);

Для получения размера изображения:
NSData *data_size = UIImagePNGRepresentation(yourImage);
int image_size =[data_size length];

0

как байты или мб. Но этот код дает вам изображение в соответствии с вашим размером, например, 100x200.

@implementation UIImage (CS_Extensions)
    - (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize {

        UIImage *sourceImage = self;
        UIImage *newImage = nil;

        CGSize imageSize = sourceImage.size;
        CGFloat width = imageSize.width;
        CGFloat height = imageSize.height;

        CGFloat targetWidth = targetSize.width;
        CGFloat targetHeight = targetSize.height;

        CGFloat scaleFactor = 0.0;
        CGFloat scaledWidth = targetWidth;
        CGFloat scaledHeight = targetHeight;

        CGPoint thumbnailPoint = CGPointMake(0.0,0.0);

        if (CGSizeEqualToSize(imageSize, targetSize) == NO) {

            CGFloat widthFactor = targetWidth / width;
            CGFloat heightFactor = targetHeight / height;

            if (widthFactor < heightFactor)
                scaleFactor = widthFactor;
            else
                scaleFactor = heightFactor;

            scaledWidth  = width * scaleFactor;
            scaledHeight = height * scaleFactor;

            // center the image

            if (widthFactor < heightFactor) {
                thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;
            } else if (widthFactor > heightFactor) {
                thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;
            }
        }


        // this is actually the interesting part:

        UIGraphicsBeginImageContext(targetSize);

        CGRect thumbnailRect = CGRectZero;
        thumbnailRect.origin = thumbnailPoint;
        thumbnailRect.size.width  = scaledWidth;
        thumbnailRect.size.height = scaledHeight;

        [sourceImage drawInRect:thumbnailRect];

        newImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        if(newImage == nil) NSLog(@"could not scale image");


        return newImage ;
    }
    @end
0

attributesOfItemAtPath:error:

Ключ «NSFileSize» это то, что вы ищете в словаре.

0

jinx сказал, что вы могли бы сделать это

NSNumber *theFileSize = [NSNumber numberWithInt:0];
NSFileManager * filemanager = [NSFileManager defaultManager];

if([filemanager fileExistsAtPath:fullFilePath])
{
    NSDictionary * attributes = [filemanager attributesOfItemAtPath:fullFilePath error:nil];
    theFileSize = [attributes objectForKey:NSFileSize];
}

[self convertbyteToKB_MB:[theFileSize  intValue];

...

-(NSString*)convertbyteToKB_MB:(int)byte 
{
NSString    *retSize = [NSString stringWithFormat:@"%d bytes",byte];
float       fByte = byte;
if (byte > 1024)
{
    //Kilobytes
    fByte = fByte / 1024;
    retSize = [NSString stringWithFormat:@"%.1f KB",fByte];
}

if (fByte > 1024)
{
    //Megabytes
    fByte = fByte / 1024;
    retSize = [NSString stringWithFormat:@"%.1f MB",fByte]; 
}

return retSize;
}

Похожие вопросы