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é UIImagePickerControllerReferenceURL
UIImagePickerControllerMediaURL
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?
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];
}
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)
}
}
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)
}
}
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];
}
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];
}