gpt4 book ai didi

ios - 如何从 UIImagePickerController 获取用相机拍摄的图像名称

转载 作者:行者123 更新时间:2023-11-30 12:42:59 25 4
gpt4 key购买 nike

下面的代码对于从图库中挑选的图像工作得非常好。但如果用相机拍摄则不起作用。我尝试将图像保存到存储中并再次读取,但我无法做到这一点。那么有人可以帮助我吗?谢谢。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {


if let referenceUrl = info[UIImagePickerControllerReferenceURL] as? NSURL, image = info[UIImagePickerControllerOriginalImage] as? UIImage {
let phAsset = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl], options: nil).lastObject as! PHAsset
PHImageManager.defaultManager().requestImageDataForAsset(phAsset, options: PHImageRequestOptions(), resultHandler: { (imagedata, dataUTI, orientation, info) in
if info!.keys.contains(NSString(string: "PHImageFileURLKey")) {
let path = info![NSString(string: "PHImageFileURLKey")] as! NSURL
print("path q\(path)")

self.mImageUrl = path
self.mlocalPath = path.path
self.mImageExtension = path.pathExtension
self.mImageName = path.lastPathComponent!
print("mImageName q\(self.mImageName)")
}

})
}

dismissViewControllerAnimated(true, completion: nil)

}

最佳答案

Swift 5+

正如前面的答案所建议的,该图像尚未存储在图库中,因此没有imageName。您需要将其存储在画廊中。使用下面的 Helper 类从 FileManager 保存和获取图像。

感谢这个Answer

class CameraImageManager {

static let shared = CameraImageManager()

public func saveImage(imageName: String, image: UIImage) {

guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }

let fileName = imageName
let fileURL = documentsDirectory.appendingPathComponent(fileName)
guard let data = image.jpegData(compressionQuality: 1) else { return }

//Checks if file exists, removes it if so.
if FileManager.default.fileExists(atPath: fileURL.path) {
do {
try FileManager.default.removeItem(atPath: fileURL.path)
print("Removed old image")
} catch let removeError {
print("couldn't remove file at path", removeError)
}

}

do {
try data.write(to: fileURL)
} catch let error {
print("error saving file with error", error)
}

}

public func getImagePathFromDiskWith(fileName: String) -> URL? {

let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

if let dirPath = paths.first {
let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
return imageUrl
}

return nil
}

public func loadImageFromDiskWith(fileName: String) -> UIImage? {

let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

if let dirPath = paths.first {
let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
let image = UIImage(contentsOfFile: imageUrl.path)
return image

}

return nil
}

}

现在,在您的 imagePickerController didFinishPickingMediaWithInfo 回调函数中,您可以通过以下方式为图像分配名称并保存它。

public func imagePickerController(_ picker: UIImagePickerController,
didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
guard let image = info[.editedImage] as? UIImage else { return }
let imageName = "RDV_" + UUID().uuidString
CameraImageManager.shared.saveImage(imageName: imageName, image: image)
print("IMAGE NAME IS: ", imageName)
}

希望有帮助。

关于ios - 如何从 UIImagePickerController 获取用相机拍摄的图像名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42025190/

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