5

tôi muốn chọn hình ảnh từ UIImagepicker, có định dạng PNG và JPG trong thư viện ảnh.cách biết hình ảnh này là jpg hoặc png iphone

và tôi cần chuyển đổi nó thành NSData. Tuy nhiên, tôi cần biết hình ảnh này có phải là UIImageJPEGRepresentation hoặc UIImagePNGRepresentation để tôi có thể chuyển đổi hình ảnh đó hay không.

UIImage *orginalImage = [info objectForKey:UIImagePickerControllerOriginalImage];  
    [picker dismissViewControllerAnimated:YES completion:nil]; 
    NSData *orgData = UIImagePNGRepresentation(orginalImage); 

Trả lời

9

Bạn không nên biết hoặc quan tâm đến hình ảnh bên trong của hình ảnh trong thư viện ảnh là gì. Các phương pháp bạn đã đề cập UIImageJPEGRepresentationUIImagePNGRepresentation trả lại cho bạn đại diện của hình ảnh cuộn camera. Bạn có thể chọn đại diện bạn muốn sử dụng.

Để tóm tắt:

NSData * pngData = UIImagePNGRepresentation(originalImage); 

Sẽ trở lại cho bạn trình bày hình ảnh trong một đối tượng NSData, với định dạng PNG.

+6

Đôi khi bạn cần phải quan tâm, bởi vì nếu bạn thực hiện UIImageJPEGRepresentation từ hình ảnh jpeg, bạn có thể nén không cần thiết ảnh đã được nén (mất chất lượng và thời gian xử lý). Ví dụ: bạn có thể cần hình ảnh được chọn để được xử lý thêm bởi thư viện chỉ chấp nhận jpeg. –

4

Khi phương thức đại biểu imagePickerController: didFinishPickingMediaWithInfo: đối với UIImagePickerController được gọi, bạn nhận được URL nội dung cho ảnh cụ thể được chọn.

[info valueForKey:UIImagePickerControllerReferenceURL] 

Bây giờ URL này có thể được sử dụng để truy cập nội dung trong ALAssetsLibrary. Sau đó, bạn sẽ cần một ALAssetRepresentation của tài sản được truy cập đó. Từ ALAssetRepresentation này, chúng tôi có thể nhận được UTI cho hình ảnh đó (http://developer.apple.com/library/ios/#DOCUMENTATION/FileManagement/Conceptual/understanding_utis/understand_utis_conc/understand_utis_conc.html)

Có lẽ mã sẽ làm cho nó một chút rõ ràng hơn:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    if (!(picker.sourceType == UIImagePickerControllerSourceTypeCamera)) { 
    NSLog(@"User picked image from photo library"); 
    ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; 
    [library assetForURL:[info valueForKey:UIImagePickerControllerReferenceURL] resultBlock:^(ALAsset *asset) { 
     ALAssetRepresentation *repr = [asset defaultRepresentation]; 
     if ([[repr UTI] isEqualToString:@"public.png"]) { 
     NSLog(@"This image is a PNG image in Photo Library"); 
     } else if ([[repr UTI] isEqualToString:@"public.jpeg"]) { 
     NSLog(@"This image is a JPEG image in Photo Library"); 
     } 
    } failureBlock:^(NSError *error) { 
     NSLog(@"Error getting asset! %@", error); 
    }]; 
    } 
} 

Khi UTI giải thích, điều này nên được một shot câu trả lời chắc chắn như thế nào hình ảnh được lưu trữ trong thư viện ảnh.

1

trong Swift 2,2

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    if (!(picker.sourceType == UIImagePickerControllerSourceType.Camera)) { 
     let assetPath = info[UIImagePickerControllerReferenceURL] as! NSURL 
     if assetPath.absoluteString.hasSuffix("JPG") { 

     } else { 

     } 
Các vấn đề liên quan