我想知道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字节。
有没有人知道这个?
答案 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
}
}