How to get the compressed file size of an image received from `UIImagePickerController`?

后端 未结 4 1443
再見小時候
再見小時候 2021-01-14 11:58

I want to know the size of image taken by UIImagePickerController by camara or library. Is there any way to find that ?

Requirement is like,

If

相关标签:
4条回答
  • 2021-01-14 12:12

    If you have a path you could ask file manager:

    attributesOfItemAtPath:error:
    

    The key 'NSFileSize' is what you're looking for in the dictionary.

    0 讨论(0)
  • 2021-01-14 12:14

    try this:

    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]);
    

    For get image size:
    NSData *data_size = UIImagePNGRepresentation(yourImage);
    int image_size =[data_size length];

    0 讨论(0)
  • 2021-01-14 12:30

    If you have a path like jinx said, you could do this

    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;
    }
    
    0 讨论(0)
  • 2021-01-14 12:33

    May this code work for you. It is not giving you image in size like bytes or mb. But this code give you image according to Your custom size like 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 讨论(0)
提交回复
热议问题