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?
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];
}
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 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];
}
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];
}