簡體   English   中英

如何獲取UIImagePickerController選擇的圖像文件大小?

[英]How can I get image file size which selected by UIImagePickerController?

我想知道由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字節。

有誰知道這件事?

如果您有這樣的代碼來拍照:

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 ,則必須在檢索文件大小之前將內存映像保存到磁盤。

正如一些評論者所說,即使我們假設方法是正確的,你仍然會重新處理圖像,因此字節大小將不匹配。 我對JPG圖像使用以下方法,對PNG使用ymmv:

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

正如評論者指出的那樣,上述內容確實會返回未壓縮的大小。

這是在Swift 4中

extension UIImage {

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM