Как получить изображение из библиотеки фотографий iOS и отобразить его в UIWebView
Я видел много примеров, когда вы используете UIImage
для вывода изображения. Мне бы хотелось, чтобы для вывода было задано значение UIWebView
, потому что я хочу добавить дополнительное форматирование HTML вокруг изображения.
Я хочу, чтобы библиотека фотографий возвращала относительный путь к изображению, хранящемуся на устройстве iOS, чтобы я мог указать это в атрибуте 'src' HTML-тега 'img'.
Это возможно?
Изменить 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 '
Вы знаете, что может быть причиной этого?
Ответы
Ответ 1
[Обновлено до 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)
}
Ответ 2
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)
}
}
Ссылка
Ответ 3
Обновлено для Swift 3.0
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
Вы можете загрузить изображение из фотобиблиотеки в веб-просмотр, как показано ниже.
- (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];
}
Ответ 5
Обратите внимание, что вы должны соответствовать протоколу 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];
}