如何获取从`UIImagePickerController`收到的图像的压缩文件大小?

时间:2012-05-30 11:22:30

标签: ios

我想通过camara或图书馆知道UIImagePickerController拍摄的图像大小。有没有办法找到它?

要求就像,

如果图像大小超过1 MB,我想压缩它。

提前谢谢。

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分:0)

如果您有路径,可以询问文件管理员:

attributesOfItemAtPath:error:

关键字“NSFileSize”是您在词典中寻找的内容。

答案 2 :(得分:0)

愿这段代码适合你。它没有像字节或mb那样给你大小的图像。但是此代码会根据您的自定义大小(如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

答案 3 :(得分: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;
}