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

如何从iOS照片库获取图像并在UIWebView中显示,ios,objective-c,uiwebview,Ios,Objective C,Uiwebview,我已经看到了很多使用UIImage输出图像的示例。我希望将输出设置为UIWebView,因为我想在图像周围添加一些额外的HTML格式 我想让照片库返回存储在iOS设备上的图像的相对路径,这样我就可以把它放在“img”HTML标记的“src”属性中 这可能吗 编辑1 我不得不根据自己的需要修改代码,但这似乎不起作用 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithIn

我已经看到了很多使用
UIImage
输出图像的示例。我希望将输出设置为
UIWebView
,因为我想在图像周围添加一些额外的HTML格式

我想让照片库返回存储在iOS设备上的图像的相对路径,这样我就可以把它放在“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:^{}];
}
-(void)imagePickerController:(UIImagePickerController*)选取器未使用信息完成PickingMediaWithInfo:(NSDictionary*)信息
{
//从库中获取图像URL
NSURL*urlPath=[info valueForKey:uiImagePickerController参考URL];
NSString*urlString=[urlPath absoluteString];
NSLog(urlString);
NSURL*root=[[NSBundle mainBundle]bundleURL];
NSString*html;
html=@“];
[memecavas loadHTMLString:html baseURL:root];
[picker DismissViewControllerInitiated:是完成:^{}];
}
我可以记录资产库URL,但它似乎没有显示在
UIWebView
上的图像中。我不知道需要将baseURL更改为什么

谢谢你的帮助


编辑2

我将
UIImagePickerControllerReferenceURL
更改为
UIImagePickerControllerMediaURL
,现在它崩溃了,因为当我用
stringByAppendingString:urlString将它附加到字符串时,它不喜欢它

它给了我一个错误:

由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“***-[\uu NSCFConstantString” stringByAppendingString::nil参数'


你知道这是什么原因吗?

[更新为swift 4] 您可以使用
UIImagePickerController
delegate选择要编辑的图像(或url)

您可以这样做:

let pickerController = UIImagePickerController()
pickerController.sourceType = .photoLibrary
pickerController.delegate = self
self.navigationController?.present(pickerController, animated: true, completion: {
})
在代理实现中,您可以使用映像的路径或映像本身:

// This method is called when an image has been chosen from the library or taken from the camera.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {    
   //You can retrieve the actual UIImage
   let image = info[UIImagePickerControllerOriginalImage] as? UIImage
   //Or you can get the image url from AssetsLibrary
   let path = info[UIImagePickerControllerReferenceURL] as? URL
   picker.dismiss(animated: true, 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];
}

您可以将图像从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];
       }

为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)
    }
}

Swift 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)
    }
}

如果您只是在图像周围布局一些字符串内容,那么使用TextKit怎么样?谢谢@rokjarc分享一个好问题。您需要的是文件URL,而不是资产库URL。将
UIImagePickerControllerReferenceURL
更改为
UIImagePickerControllerMediaURL
。这仍然提供资产库URL,并且您正在删除OP需要的所有HTML。如果我使用相机拍摄照片,则
[info valueForKey:UIImagePickerControllerReferenceURL]给我(空)值。。有什么解决办法吗?