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
UIImagePickerControllerReferenceURL
をUIImagePickerControllerMediaURL
に変更しましたが、stringByAppendingString:urlString
で文字列に追加すると気に入らないためクラッシュします
それは私にエラーを与えます:
キャッチされない例外 'NSInvalidArgumentException'によるアプリの終了、理由: '***-[__ NSCFConstantString stringByAppendingString:]:nil argument'
何がこれを引き起こしているのか知っていますか?
[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)
}
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)
}
}
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)
}
}
以下のコードに示すように、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];
}
プロトコル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];
}