web-dev-qa-db-fra.com

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

J'ai vu beaucoup d'exemples d'utilisation de la UIImage pour la sortie d'une image. J'aimerais que la sortie soit définie sur UIWebView parce que je veux mettre un formatage HTML supplémentaire autour de l'image.

Je souhaite que la bibliothèque de photos renvoie le chemin relatif d'une image stockée sur le périphérique iOS, afin que je puisse l'insérer dans l'attribut "src" de la balise HTML "img".

Est-ce possible?


Modifier 1

J'ai dû modifier mon code pour ce que je voulais mais cela ne semble pas fonctionner.

- (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 peux enregistrer l'URL de la bibliothèque de ressources, mais l'image ne semble pas être affichée dans la variable UIWebView. Je ne sais pas en quoi je dois changer l'URL de base.

Toute aide appréciée.


Modifier 2

J'ai changé UIImagePickerControllerReferenceURL en UIImagePickerControllerMediaURL et maintenant il se bloque car il ne l'aime pas quand je l'ajoute à une chaîne avec stringByAppendingString:urlString

Cela me donne l'erreur:

Arrêt de l'application en raison d'une exception non interceptée 'NSInvalidArgumentException', raison: '*** - [__ NSCFConstantString stringByAppendingString:]: argument nil '

Savez-vous ce qui pourrait causer cela?

23
X0r0N

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

vous pouvez faire ceci comme ceci:

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

dans l'implémentation déléguée, 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];
}
35
Lirik

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

Réf

8
Zaid Pathan

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
Chris Byatt

Vous pouvez charger une image de la photothèque dans la vue Web, comme indiqué ci-dessous. 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
Vaisakh

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 ensuite 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
Balram Tiwari