gpt4 book ai didi

ios - 如何获取imagePickerController添加的图片路径

转载 作者:行者123 更新时间:2023-11-29 00:21:32 36 4
gpt4 key购买 nike

我尝试获取由imagePickerController(iOS,swift 3)添加的图片的路径,并且尝试了不同的方法,但每次都得到“nil”...

这是我尝试过的方法:

1.

if let picturePath = info[UIImagePickerControllerReferenceURL] as? URL {
print(picturePath)
} else {
print("Oh no...")
}

2.

let imageURL = info[UIImagePickerControllerReferenceURL] as NSURL
let imageName = imageURL.path!.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String
let localPath = documentDirectory.stringByAppendingPathComponent(imageName)

和3。

let image = info[UIImagePickerControllerOriginalImage] as! UIImage
let imageUrl = info[UIImagePickerControllerReferenceURL] as? NSURL
let imageName = imageUrl?.lastPathComponent
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let photoURL = NSURL(fileURLWithPath: documentDirectory)
let localPath = photoURL.appendingPathComponent(imageName!)

if !FileManager.default.fileExists(atPath: localPath!.path) {
do {
try UIImageJPEGRepresentation(image, 1.0)?.write(to: localPath!)
print("file saved")
}catch {
print("error saving file")
}
}
else {
print("file already exists")
}

如果您有想法,我会很高兴听到!

谢谢,

亚历山大。

最佳答案

如果您添加一张照片(即用相机拍摄一张照片),它不会自动保存。正如您所发现的,您只能通过访问 info[UIImagePickerControllerOriginalImage] 获得 UIImage。

例如,您可以使用 UIImageWriteToSavedPhotosAlbum(_:_:_:_:)将其保存到相机胶卷或获取 JPEG representation并将返回的 Data 保存在文档文件夹中任何你喜欢的地方(比如你的#3,但你必须自己想出一个文件名)。

更新

好的,这是它的工作原理。只是强调这一点:在图像选择器完成处理程序中,您只会得到一个 UIImage。此图像尚未保存,因此无法获取 URL。

然后你可以

  • 将其保存到您的文档目录中,保存到您喜欢的路径。这意味着您选择路径/URL。
  • 将其保存到相机胶卷。在这种情况下,您必须查询照片库以获取它选择的 URL。 UIImageWriteToSavedPhotosAlbum(...)completionSelector 只会告诉您它是否有效或是否发生了错误。

保存到文档目录

func saveToDocuments(image: UIImage) -> URL throws
{
let imageFolder = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let imageURL = imageFolder.appendingPathComponent("\(UUID()).jpg")
let jpegData = UIImageJPEGRepresentation(image, 0.5)
try jpegData?.write(to: imageURL, options: .atomic)
return imageURL
}

为了简化,我选择了一个 UUID 作为(基本)文件名。

保存到相机胶卷

您告诉照片库创建一个 Assets ,然后查询该 Assets 以获取 URL。为简洁起见,我省略了错误处理。

func saveToCameraRoll(image: UIImage, completion: @escaping (URL?) -> Void) {
var placeHolder: PHObjectPlaceholder? = nil
PHPhotoLibrary.shared().performChanges({
let creationRequest = PHAssetChangeRequest.creationRequestForAsset(from: image)
placeHolder = creationRequest.placeholderForCreatedAsset!
}, completionHandler: { success, error in
guard success, let placeholder = placeHolder else {
completion(nil)
return
}
let assets = PHAsset.fetchAssets(withLocalIdentifiers: [placeholder.localIdentifier], options: nil)
guard let asset = assets.firstObject else {
completion(nil)
return
}
asset.requestContentEditingInput(with: nil, completionHandler: { (editingInput, _) in
completion(editingInput?.fullSizeImageURL)
})
})
}

用法:

let image = UIImage(...)
saveToCameraRoll(image: image) { print("URL: \(String(describing: $0))") }

关于ios - 如何获取imagePickerController添加的图片路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098376/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com