web-dev-qa-db-ja.com

iOSフォトライブラリから画像を取得してUIWebViewに表示するにはどうすればよいですか

UIImageを使用して画像を出力する多くの例を見てきました。出力をUIWebViewに設定したいのですが、画像の周りにHTMLフォーマットを追加したいのです。

IOSデバイスに保存されている画像の相対パスを返すように写真ライブラリを取得して、HTMLタグ「img」の「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

UIImagePickerControllerReferenceURLUIImagePickerControllerMediaURLに変更しましたが、stringByAppendingString:urlStringで文字列に追加すると気に入らないためクラッシュします

それは私にエラーを与えます:

キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '***-[__ NSCFConstantString stringByAppendingString:]:nil argument'

何がこれを引き起こしているのか知っていますか?

22
X0r0N

[Swift 4に更新)UIImagePickerControllerデリゲートを使用して、編集する画像(またはURL)を選択できます。

次のようにこれを行うことができます:

let pickerController = UIImagePickerController()
pickerController.sourceType = .photoLibrary
pickerController.delegate = self
self.navigationController?.present(pickerController, animated: true, completion: {
})

デリゲートの実装では、画像のパスまたは画像自体を使用できます。

// This method is called when an image has been chosen from the library or taken from the camera.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {    
   //You can retrieve the actual UIImage
   let image = info[UIImagePickerControllerOriginalImage] as? UIImage
   //Or you can get the image url from AssetsLibrary
   let path = info[UIImagePickerControllerReferenceURL] as? URL
   picker.dismiss(animated: true, completion: nil)
}
36
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)
    }
}

参照

9
Zaid Pathan

Swift 3.に更新

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

以下のコードに示すように、Photolibraryからwebviewに画像をロードできます。

 - (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

プロトコル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
Balram Tiwari