在我的應用程序中,用戶可以從專輯或相機中選擇一張照片,在這裏我可以獲得uiimage表示。由於專輯可能有來自網絡的圖片,因此文件類型不僅僅是jpg。然後我需要將它發送到服務器而無需轉換。在這裏,我只能使用nsdata。
我知道UIImageJPEGRepresentation和UIImagePNGRepresentation,但我認爲這兩種方法可能會轉換原始圖像。也許當質量設置爲1 UIImageJPEGRepresentation可以得到原始圖片?
有沒有什麼方法可以獲得原始的uiimage nsdata?我如何獲得uiimage的原始nsdata?
1
A
回答
6
您可以使用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
或UIImagePNGRepresentation
作爲後備。但在這種情況下,您將無法獲得原始數據,例如元數據(EXIF等)丟失。
+0
謝謝!我還沒有注意到imagePickerController:didFinishPickingImage:editingInfo:已被棄用。 –
0
在iOS 8.0+使用PHImageManager.default()。requestImageData()你找到對應的資產在資產後(你可以得到資產PHAsset.fetchAssets()。
查看更多信息和示例代碼在my answer到非常類似的問題How to upload image that was taken from UIImagePickerController
相關問題
- 1. NSData - > UIImage - > NSData?
- 2. NSData - > UIImage - > NSData
- 3. 從UIImage獲取底層NSData *
- 4. 如何獲得AppIcon的UIImage?
- 5. 如何獲得UIImage的
- 6. 如何獲得Jersey的原始POST?
- 7. IPhone NSData到UIImage
- 8. NSData和UIImage
- 9. NSData加載UIImage
- 10. NSData到UIImage
- 11. 如何NSData的值轉換爲UIImage的
- 12. 如何從UIImage獲得NSDATE?
- 13. 如何獲得原始圖像擴展
- 14. 從NSData獲取較低質量的UIImage?
- 15. 我如何獲得原始值的參考?
- 16. 從NSData UIImage轉換
- 17. 如何獲得原則的原始數據庫
- 18. 如何處理NSData並返回UIImage(Swift)
- 19. 如何將UIImage轉換爲NSData或CFDataRef?
- 20. 如何繪製PDF NSData到UIImage?
- 21. 如何將NSData轉換爲UIImage?
- 22. 在xlrd中,我如何獲得原始單元格值?
- 23. Boost.Any獲得原始類型
- 24. 從HASH獲得原始值
- 25. 我如何獲得原始值,如果我的數據綁定失敗驗證
- 26. 如何獲得UIImage的像素
- 27. Ruby:Soap4r:我如何獲得發送到我的soap服務器的原始請求?
- 28. NSData initWithContentsOfURL:不返回原始分配?
- 29. Swift中的原始代碼UIImage?
- 30. 如何保存與原始元數據的修改後的UIImage?
據我所知,照相機膠捲中的圖片以JPEG格式存儲(至少這是我看到在SSH設備和檢查文件後看到的),因此JPEG代表會工作在你的情況下 –
@KaanDedeoglu:許多應用程序都有一個功能「存儲在相冊中」,並且它也適用於TIFF,BMP和其他一些文件類型。 –