如何获取UIImagePickerController选择的图像文件大小?

时间:2011-09-29 05:28:51

标签: iphone objective-c

我想知道UIImagePickerController选择的iPhone PhotoAlbum中的图像文件大小。

我已尝试使用1,571,299字节jpeg图像的此代码。

UIIamge *selectedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

NSData *imageData; 
if ( /* PNG IMAGE */ ) 
    imageData = UIImagePNGReprensentation(selectedImage);
else 
    imageData = UIImageJPEGReprensentation(selectedImage);

NSUInteger fileLength = [imageData length];

NSLog(@"file length : [%u]", fileLength);

但是当我运行代码时,它会打印362788字节。

有没有人知道这个?

3 个答案:

答案 0 :(得分:6)

如果您有这样的代码来拍照:

UIImagePickerController *controller = [[[UIImagePickerController alloc] init] autorelease];
controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
controller.delegate = self;
[self presentModalViewController:controller animated:YES];

然后,您可以通过以下方式检索所选图像的文件大小:

NSURL *assetURL = [info objectForKey:@"UIImagePickerControllerReferenceURL"];
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
[library assetForURL:assetURL resultBlock:^(ALAsset *asset) {
    NSLog(@"Size: %lld", asset.defaultRepresentation.size);
} failureBlock:nil];

如果源类型为UIImagePickerControllerSourceTypeCamera,则必须先将内存中的映像保存到磁盘,然后再检索其文件大小。

答案 1 :(得分:2)

正如一些评论者所说,即使我们假设方法是正确的,你仍然会重新处理图像,所以字节大小不匹配。我对JPG图像使用以下方法,对于PNG使用ymmv:

+ (NSInteger)bytesInImage:(UIImage *)image {
    CGImageRef imageRef = [image CGImage];
    return CGImageGetBytesPerRow(imageRef) * CGImageGetHeight(imageRef);    
}

正如评论者指出的那样,上面确实会返回未压缩的大小。

答案 2 :(得分:0)

这里是Swift 4

extension UIImage {

    var memorySize: Int {
        guard let imageRef = self.cgImage else { return 0 }
        return imageRef.bytesPerRow * imageRef.height
    }
}