如何解决SwiftUI图像选择器,来自相机的url图像
在我的SwiftUI项目中,我需要使用图像的URL,以便在项目的其他部分中重复使用。
我创建了这个图像选择器,可以选择手机相册还是使用iPhone相机(使用var ShootNew:Bool)拍摄新照片
我面临以下问题:当我使用选择器从相册中选择图像时,我正在获取图像的网址,但是当我想用相机拍摄新照片时,我无法获取新图片,
如何获取用相机拍摄的照片的网址?
这里是我的imagePicker
struct ImagePickerNew: UIViewControllerRepresentable {
var shootNew: Bool
var needEdit: Bool
@Binding var image: UIImage?
@Binding var isPresented: Bool
@Binding var imageUrl : URL?
class Coordinator: NSObject,UINavigationControllerDelegate,UIImagePickerControllerDelegate {
var shootNew: Bool
var needEdit: Bool
@Binding var image: UIImage?
@Binding var isPresented: Bool
@Binding var imageUrl : URL?
init(shootNew: Bool,needEdit: Bool,image: Binding<UIImage?>,isPresented:Binding<Bool>,imageURL1 : Binding<URL?>) {
self.shootNew = shootNew
self.needEdit = needEdit
_image = image
_isPresented = isPresented
_imageUrl = imageURL1
}
func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediawithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let imageEdited = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
self.image = imageEdited
} else {
self.image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage)
}
if let imageURLEdited = info[UIImagePickerController.InfoKey.imageURL] as? URL{
self.imageUrl = imageURLEdited
debugPrint("ho url")
} else {
debugPrint("UNABLE URL")
}
self.isPresented = false
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.isPresented = false
}
}
func makeCoordinator() -> Coordinator {
return Coordinator(shootNew: shootNew,needEdit: needEdit,image: $image,isPresented: $isPresented,imageURL1: $imageUrl)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePickerNew>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.navigationController?.delegate = context.coordinator
picker.sourceType = shootNew ? .camera : .photoLibrary
picker.allowsEditing = needEdit
picker.mediaTypes = [kUTTypeImage] as [String]
return picker
}
func updateUIViewController(_ uiViewController: UIImagePickerController,context: UIViewControllerRepresentableContext<ImagePickerNew>) {
}
}
非常感谢您的帮助。
解决方法
相机拍摄的照片没有写入磁盘,所以无法获取到URL,需要先将照片数据写入临时文件夹,再获取URL。下面是一个例子:
func imagePickerController(_ picker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
var selectedImage: UIImage!
var imageUrl: URL!
if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
selectedImage = image
} else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
selectedImage = image
}
if picker.sourceType == UIImagePickerController.SourceType.camera {
let imgName = "\(UUID().uuidString).jpeg"
let documentDirectory = NSTemporaryDirectory()
let localPath = documentDirectory.appending(imgName)
let data = selectedImage.jpegData(compressionQuality: 0.3)! as NSData
data.write(toFile: localPath,atomically: true)
imageUrl = URL.init(fileURLWithPath: localPath)
} else if let selectedImageUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL {
imageUrl = selectedImageUrl
}
self.mainImageView.image = selectedImage
MediaAPI.uploadMedia(fileUrl: imageUrl)
self.dismiss(animated: true,completion: nil)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。