3

我想知道UIImagePickerControllercamara 或 library 拍摄的图像大小。有什么办法可以找到吗?

要求就像,

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

提前致谢。

4

4 回答 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];

于 2012-05-30T11:38:51.537 回答
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
于 2012-05-30T12:32:53.280 回答
0

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

attributesOfItemAtPath:error:

键 'NSFileSize' 是您在字典中查找的内容。

于 2012-05-30T11:33:02.577 回答
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;
}
于 2012-05-30T16:18:38.773 回答