![](/img/trans.png)
[英]AFNetworking can easily return a UIImage, but how do I return NSData?
[英]How can i get original nsdata of uiimage?
在我的應用程序中,用戶可以從相冊或相機中選擇一張圖片,我可以在其中獲得uiimage表示。 由於相冊可能包含來自網絡的圖片,因此文件類型不僅是jpg。 然后,我需要將其發送到服務器而不進行轉換。 在這里我只能使用nsdata。
我知道UIImageJPEGRepresentation和UIImagePNGRepresentation,但是我認為這兩種方法可以轉換原始圖像。 也許當質量設置為1 UIImageJPEGRepresentation時可以獲得原始圖片嗎?
有什么方法可以獲取原始的uiimage nsdata嗎?
您可以使用ALAssetsLibrary
和ALAssetRepresentation
來獲取原始數據。 例:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSURL *imageURL = [info objectForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library assetForURL:imageURL resultBlock:^(ALAsset *asset) {
ALAssetRepresentation *repr = [asset defaultRepresentation];
NSUInteger size = repr.size;
NSMutableData *data = [NSMutableData dataWithLength:size];
NSError *error;
[repr getBytes:data.mutableBytes fromOffset:0 length:size error:&error];
/* Now data contains the image data, if no error occurred */
} failureBlock:^(NSError *error) {
/* handle error */
}];
}
但是有一些事情要考慮:
assetForURL:
異步工作。 assetForURL:
會導致一個確認對話框,這可能會激怒用戶: “您的應用”希望使用您的當前位置。 這樣可以訪問照片和視頻中的位置信息。
assetForURL:
將調用故障塊。 assetForURL:
將失敗,而不會再次詢問用戶。 僅當您在“系統設置”中重置位置警告時,才會再次詢問用戶。 因此,您應該准備UIImageJPEGRepresentation
此方法失敗,並使用UIImageJPEGRepresentation
或UIImagePNGRepresentation
作為后備。 但是在那種情況下,您將不會獲得原始數據,例如,缺少元數據(EXIF等)。
在iOS 8.0+上,在資產中找到相應資產后,請使用PHImageManager.default()。requestImageData()(可以使用PHAsset.fetchAssets()進入資產)。
在我對非常相似的問題的答案中 ,請參見更多信息和示例代碼。 如何上傳從UIImagePickerController拍攝的圖像 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.