如何从iOS照片库中获取图像并将其显示在UIWebview中

我见过很多使用UIImage输出图像的例子。 我想要将输出设置为UIWebview,因为我想在图像周围添加一些额外的HTML格式。

我想让照片库返回存储在iOS设备上的图像的相对path,这样我就可以把它放在'img'HTML标签的'src'属性中。

这可能吗?


编辑1

我不得不修改我想要的代码,但这似乎不工作。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //Get Image URL from Library NSURL *urlPath = [info valueForKey:UIImagePickerControllerReferenceURL]; NSString *urlString = [urlPath absoluteString]; NSLog(urlString); NSURL *root = [[NSBundle mainBundle] bundleURL]; NSString *html; html = @"<img src='"; html = [html stringByAppendingString:urlString]; html = [html stringByAppendingString:@"' />"]; [MemeCanvas loadHTMLString:html baseURL:root]; [picker dismissViewControllerAnimated:YES completion:^{}]; } 

我能够logging资产库URL,但它似乎并没有显示在UIWebview上的图像。 我不知道我需要更改baseURL。

任何帮助赞赏。


编辑2

我将UIImagePickerControllerReferenceURL更改为UIImagePickerControllerMediaURL,现在它崩溃,因为它不喜欢它时,我将它追加到stringstringByAppendingString:urlString

它给了我错误:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFConstantString stringByAppendingString:]: nil argument' 

你知道这可能是什么原因吗?

您可以使用UIImagePickerController委托来select要编辑的图像(或URL)。

你可以这样做:

 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePickerController.delegate = self; [self presentViewController:imagePickerController animated:YES completion:nil]; 

在委托实现中,您可以使用图像的path或图像本身:

 // This method is called when an image has been chosen from the library or taken from the camera. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //You can retrieve the actual UIImage UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; //Or you can get the image url from AssetsLibrary NSURL *path = [info valueForKey:UIImagePickerControllerReferenceURL]; [picker dismissViewControllerAnimated:YES completion:nil]; } 

更新了Swift 3.0

 let imagePickerController = UIImagePickerController() imagePickerController.sourceType = .PhotoLibrary imagePickerController.delegate = self self.presentViewController(imagePickerController, animated: true, completion: nil) 

和代表:

 extension YourViewController: UIImagePickerControllerDelegate { func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { // Whatever you want here self.pickedImage = image picker.dismissViewControllerAnimated(true, completion: nil) } } 

斯威夫特4

 class ViewController: UIViewController { var pickedImage:UIImage? @IBAction func ActionChooseImage(sender:UIButton){ let imagePickerController = UIImagePickerController() imagePickerController.sourceType = .photoLibrary imagePickerController.delegate = self self.present(imagePickerController, animated: true, completion: nil) } } extension ViewController: UIImagePickerControllerDelegate,UINavigationControllerDelegate { func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage] as? UIImage self.pickedImage = image picker.dismiss(animated: true, completion: nil) } } 

参考

您可以将Photolibrary中的图像加载到webview中,如下所示

  - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSURL *urlPath = [info valueForKey:UIImagePickerControllerReferenceURL]; UIImage *cameraImage = [info valueForKey:UIImagePickerControllerOriginalImage]; NSData *myData = UIImagePNGRepresentation(cameraImage); [self.webview loadData:myData MIMEType:@"image/png" textEncodingName:nil baseURL:nil]; [self.picker dismissViewControllerAnimated:YES completion:nil]; } 

请注意,您必须符合协议UIImagePickerControllerDelegate

 UIImagePickerController *myImagePicker = [[UIImagePickerController alloc] init]; myImagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; myImagePicker.delegate = self; [self presentViewController:myImagePicker animated:YES completion:nil]; 

加载一个图像,然后在WebView中显示。

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { //Get Image URL from Library NSURL *urlPath = [info valueForKey:UIImagePickerControllerReferenceURL]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:urlPath]; [webview loadRequest:requestObj]; }