我正在尝试获取与PhotoLibrary中的图像相关联的深度数据。
我可以获取图像和 URL ,但我似乎无法获得与之相关的辅助数据。对CGImageSourceCreateWithURL
的调用会返回一个来源,但CGImageSourceCopyAuxiliaryDataInfoAtIndex
的调用会为nil
和kCGImageAuxiliaryDataTypeDisparity
返回kCGImageAuxiliaryDataTypeDepth
。
我在这里缺少什么吗?
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage]
let url = info[UIImagePickerControllerImageURL]
print("url=",url)
guard let source = CGImageSourceCreateWithURL(url as! CFURL, nil) else {
return
}
guard let auxDataInfo = CGImageSourceCopyAuxiliaryDataInfoAtIndex(source, 0, kCGImageAuxiliaryDataTypeDisparity) as? [AnyHashable : Any] else {
return
}
}
答案 0 :(得分:0)
studentId
提供的图像URL不包括与深度相关的任何元数据。要获取此信息,您必须使用PhotoBook API访问2018/10/08 12:15:04 David access denied
2018/10/08 12:15:05 David access denied
2018/10/08 12:15:05 David access granted
2018/10/08 13:15:14 Karel Jan access granted
2018/10/08 13:15:19 Lydia access denied
2018/10/08 13:15:20 Lydia access denied
2018/10/08 13:15:21 Lydia access granted
2018/10/08 14:15:26 Henk access denied
2018/10/08 14:15:26 Henk access denied
2018/10/08 14:15:27 Henk access denied
。
首先,导入API:
file="log.txt"
while read -r regel
do
sort | awk '{file=$1 substr($2,1,2); gsub(/[^0-9]/,"",file) }
{print > ("logfile_" file ".txt")}'
zip logfile_20181008.zip logfile_20181008{00..23}.txt
done < "$file"
在显示图像选择器之前,请请求用户访问相册。您需要为“照片库使用情况”添加信息字典键,才能正常工作:
ArchiveerLog.sh: line 6: syntax error near unexpected token `('
ArchiveerLog.sh: line 6: ` {print > (prefix bestand".txt")}'
现在,在图像选择器委托中,您可以执行以下操作:
UIImagePickerController
请注意,文件可能包含深度或视差信息。您可以很容易地在这些之间进行转换,但是您可能需要使用PHAsset
来检查哪一个。另外还要注意新的补充深度数据import Photos
,它可以为肖像图像中的对象提供更高的分辨率蒙版,非常适合进行绿屏效果。
答案 1 :(得分:0)
我为此整整奋斗了一天!不过,在看了WWDC视频的前半部分标题为“深度编辑图像”之后,我终于明白了。
我的问题是使用不是来自PHAsset的图像的URL。
这里是链接:
如果您不想观看它,请查看我编写的此功能,该功能几乎可以完成视频中的操作。
您必须提供从UIImagePickerDelegate的DID_FINISH_PICKING_IMAGE_WITH_INFO函数返回的[info]函数。
使用此功能之前-请注意,实际上这是行不通的!值得一看的是,它清楚地显示了步骤。但是由于异步行为,该函数在有机会将局部深度变量设置为AVDepthData之前始终将返回nil。
我的解决方案是将功能分开,并使用Grand Central Dispatch创建一个Dispatch组,输入它,从PHAsset中检索imageURL,然后离开Dispatch组。离开调度组后,DispatchGroup.NOTIFIED函数将继续进行其余的过程。
我希望这会有所帮助!
func returndepthdata(usingimageinfo: [UIImagePickerController.InfoKey : Any]) -> AVDepthData? {
var depthdata: AVDepthData! = nil
if let photoasset = usingimageinfo[.phAsset] as? PHAsset {
let input = photoasset.requestContentEditingInput(with: nil, completionHandler: { (input, info) in
if let imageurl = input?.fullSizeImageURL {
if let source = CGImageSourceCreateWithURL(imageurl as CFURL, nil) {
if let imageproperties = CGImageSourceCopyProperties(source, nil) {
if let disparityinfo = CGImageSourceCopyAuxiliaryDataInfoAtIndex(source, 0, kCGImageAuxiliaryDataTypeDisparity) {
if let truedepthdata = try? AVDepthData(fromDictionaryRepresentation: disparityinfo as! [AnyHashable : Any]) {
depthdata = truedepthdata
}
}
}
}
}
})
}
return depthdata
}