Comment puis-je obtenir une image de la photothèque iOS et l'afficher dans UIWebView

j'ai vu beaucoup d'exemples où vous utilisez le UIImage pour la sortie d'une image. Je voudrais la sortie à régler à un UIWebView parce que je veux mettre un peu plus de formatage HTML autour de l'image.

je veux que la photothèque renvoie le chemin relatif d'une image stockée sur le périphérique iOS, de sorte que le je puisse le mettre dans l'attribut 'src' de la balise HTML 'img'.

Est-ce possible?


Edit 1

j'ai eu modifier mon code pour ce que je voulais, mais ça ne marche pas.

- (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:^{}];
}

je suis capable de logger L'URL de la bibliothèque-ressource mais il ne semble pas être affiché l'image sur le UIWebView. Je ne sais pas ce que je dois changer le baseURL.

Toute aide appréciée.


Edit 2

j'ai changé UIImagePickerControllerReferenceURLUIImagePickerControllerMediaURL et maintenant il se bloque car il ne marche pas comme ça quand je l'ajouter à une chaîne de caractères stringByAppendingString:urlString

il me donne le erreur:

fin de l'application en raison d'une exception non confirmée 'NSInvalidArgumentException', reason: '* * * - [__NSCFConstantString stringByAppendingString:]: néant l'argument'

savez-vous ce qui pourrait causer cela?

23
demandé sur Anh Pham 2013-12-15 17:47:21

5 réponses

vous pouvez utiliser UIImagePickerController délégué pour sélectionner l'image (ou l'url) que vous souhaitez modifier.

vous pouvez le faire comme ceci:

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

dans l'implémentation delegate vous pouvez utiliser le chemin de l'image ou l'image elle-même:

// 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];
}
36
répondu Lirik 2016-02-14 07:07:32

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

Ref

8
répondu Zaid Pathan 2017-09-01 10:59:18

mise à jour pour Swift 3.0

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

Et le délégué:

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
répondu Chris Byatt 2016-06-23 16:02:25

Vous pouvez charger L'Image de Photolibrary dans webview comme montré ci-dessous le code

 - (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];
       }
1
répondu Vaisakh 2013-12-18 06:32:57

Veuillez noter que vous devez vous conformer au protocole UIImagePickerControllerDelegate

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

charger une Image et L'afficher dans 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
répondu Balram Tiwari 2013-12-15 15:02:25