2013-12-15 72 views
20

我见过很多使用UIImage输出图像的示例。我希望将输出设置为UIWebview,因为我想在图像周围添加一些额外的HTML格式。如何从iOS照片库中获取图像并将其显示在UIWebview中

我想让照片库返回存储在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:^{}]; 

} 

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

任何帮助表示赞赏。


编辑2

我改变UIImagePickerControllerReferenceURL到UIImagePickerControllerMediaURL,现在它崩溃,因为它不喜欢,当我把它添加到与stringByAppendingString的字符串:urlString

它给我的错误:

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

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

+0

与资产的URL尝试:http://stackoverflow.com/ a/3845729/653513 –

+1

如何使用TextKit如果哟你只需在图像周围布置一些字符串内容,并感谢@rokjarc分享一个好问题。 – johnMa

+0

您需要文件URL,而不是资产库URL。将'UIImagePickerControllerReferenceURL'更改为'UIImagePickerControllerMediaURL'。 –

回答

34

您可以使用UIImagePickerController委托来选择要编辑的图像(或url)。

你可以做到这一点是这样的:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
imagePickerController.delegate = self; 
[self presentViewController:imagePickerController animated:YES completion:nil]; 
在委托执行,你可以使用图像的路径或图像本身

// 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]; 
} 
0

请注意,您必须符合protocol 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]; 
} 
+0

这仍然提供资产库URL,并且您将删除OP所需的所有HTML。 –

+0

嗨@AaronBrager你是如何管理资产库的网址上传到webview .. – Coder

1

可以从Photolibrary如下所示代码

- (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]; 
     } 
4

更新了夫特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

斯威夫特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) 
    } 
} 

Ref

相关问题