PHImageResultIsDegradedKey/PHImageFileURLKey 未找到
PHImageResultIsDegradedKey/PHImageFileURLKey is not found
iOS 13 beta4 不再提供
1) PHImageFileURLKey
2) 图像结果信息键中的 PHImageResultIsDegradedKey。
有人知道找到 PHAsset 文件 url 的方法吗?
您必须从 PHAsset 对象使用此函数:
- (PHContentEditingInputRequestID)requestContentEditingInputWithOptions:(nullable PHContentEditingInputRequestOptions *)options completionHandler:(void (^)(PHContentEditingInput *__nullable contentEditingInput, NSDictionary *info))completionHandler;
然后你可以这样检索URL:
NSURL *url = contentEditingInput.fullSizeImageURL;
一些示例 Objective-C 代码供其他人查找:
PHContentEditingInputRequestOptions *editOptions = [[PHContentEditingInputRequestOptions alloc] init];
[myPHAsset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
if (contentEditingInput.fullSizeImageURL) {
//do something with contentEditingInput.fullSizeImageURL
}
}];
1.PHImageResultIsDegradedKey 现在可用于最新的 iOS 13 GM 和 GM2。所以一个问题解决了。
2.PHImageFileURLKey 将在 iOS 13 中不可用,如果您非常需要图像资产的 fileURL 并且您需要它而没有任何 PhotoKit 的方法回调用于资产描述中的正则表达式。它会起作用。
您可以使用 +[PHAssetResource assetResourcesForAsset:] 获取 PHAssetResource 对象的 description
,使用结果数组中的第一个对象,然后提取 fileURL
来自使用正则表达式的字符串:
public static func getFileURLFromPHAssetResourceDescription(description: String) -> String? {
let regex = try! NSRegularExpression(pattern: "(?<=fileURL: ).*(?=\s)")
if let result = regex.firstMatch(in: description, options: [], range: NSRange(location: 0, length: description.count)) {
let url = String(description[Range(result.range, in: description)!])
return url
}
return nil
}
注意:仅从 iOS9
在guhan0的建议下,我做了一个小小的改动。确实,有时候,有多个"fileURL:...",所以,当值以"file://"开头时,我取第一个,这意味着有一个文件url。我认为有更好的解决方案,但目前效果还不错:
private func getFileURLFromPHAssetResource(resourceDescription description: String) -> String? {
let regex = try! NSRegularExpression(pattern: "(?<=fileURL: ).*(?=\s)")
for match in regex.matches(in: description, options: [], range: NSRange(location: 0, length: description.count)).lazy {
let url = String(description[Range(match.range, in: description)!])
if url.starts(with: "file://") { return url }
}
return nil
}
在 iOS 13.0 中,删除了 PHImageFileURLKey。为了访问 PHAsset 数据,当我们调用这个函数来请求图像数据时,我们可以通过这个键 PHImageFileUTIKey.
来获取图像信息
PHImageManager.default().requestImageData(for: asset, options: PHImageRequestOptions(), resultHandler:{ [weak self] (imagedata, dataUTI, orientation, info) in
if let assetInfo = info, let fileURLKey = assetInfo["PHImageFileUTIKey"] as? NSString {
let fileComp = fileURLKey.components(separatedBy: ".")
if fileComp.count > 0 {
// Do your stuff.
}
})
如果有人希望在 Xamarin.iOS 上实现相同的功能,这是我的 swift 代码的 C# 版本:
phAsset.RequestContentEditingInput(new PHContentEditingInputRequestOptions(), phcontentediting);
然后:
private void phcontentediting(PHContentEditingInput contentEditingInput, NSDictionary requestStatusInfo)
{
}
调用phcontentediting
时,contentEditingInput有很多有用的信息,比如CreationDate
、FullSizeImageUrl
甚至Location
!
让资源 = PHAssetResource.assetResources(用于:self.phasset)
让url = resourse.first?.originalFilename
这对我有用!
如果有人在 Xamarin 中使用 RequestContentEditingInput 时需要文件大小。
var options = new PHContentEditingInputRequestOptions();
asset.RequestContentEditingInput(options, (PHContentEditingInput contentEditingInput, NSDictionary requestStatusInfo) =>
{
var imageUrl = contentEditingInput.FullSizeImageUrl.ToString();
NSObject fileSizeObj;
if (contentEditingInput.FullSizeImageUrl.TryGetResource(new NSString("NSURLFileSizeKey"), out fileSizeObj))
{
var fileSizeNSNum = fileSizeObj as NSNumber;
long fileSize = fileSizeNSNum.Int64Value;
}
// Make sure to dispose or your app will crash with a lot of photos!
contentEditingInput.Dispose();
});
您可以使用
let photoPath = photoAsset.localIdentifier
替换
let photoPath = info["PHImageFileURLKey"]
iOS 13 beta4 不再提供
1) PHImageFileURLKey 2) 图像结果信息键中的 PHImageResultIsDegradedKey。
有人知道找到 PHAsset 文件 url 的方法吗?
您必须从 PHAsset 对象使用此函数:
- (PHContentEditingInputRequestID)requestContentEditingInputWithOptions:(nullable PHContentEditingInputRequestOptions *)options completionHandler:(void (^)(PHContentEditingInput *__nullable contentEditingInput, NSDictionary *info))completionHandler;
然后你可以这样检索URL:
NSURL *url = contentEditingInput.fullSizeImageURL;
一些示例 Objective-C 代码供其他人查找:
PHContentEditingInputRequestOptions *editOptions = [[PHContentEditingInputRequestOptions alloc] init];
[myPHAsset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
if (contentEditingInput.fullSizeImageURL) {
//do something with contentEditingInput.fullSizeImageURL
}
}];
1.PHImageResultIsDegradedKey 现在可用于最新的 iOS 13 GM 和 GM2。所以一个问题解决了。
2.PHImageFileURLKey 将在 iOS 13 中不可用,如果您非常需要图像资产的 fileURL 并且您需要它而没有任何 PhotoKit 的方法回调用于资产描述中的正则表达式。它会起作用。
您可以使用 +[PHAssetResource assetResourcesForAsset:] 获取 PHAssetResource 对象的 description
,使用结果数组中的第一个对象,然后提取 fileURL
来自使用正则表达式的字符串:
public static func getFileURLFromPHAssetResourceDescription(description: String) -> String? {
let regex = try! NSRegularExpression(pattern: "(?<=fileURL: ).*(?=\s)")
if let result = regex.firstMatch(in: description, options: [], range: NSRange(location: 0, length: description.count)) {
let url = String(description[Range(result.range, in: description)!])
return url
}
return nil
}
注意:仅从 iOS9
在guhan0的建议下,我做了一个小小的改动。确实,有时候,有多个"fileURL:...",所以,当值以"file://"开头时,我取第一个,这意味着有一个文件url。我认为有更好的解决方案,但目前效果还不错:
private func getFileURLFromPHAssetResource(resourceDescription description: String) -> String? {
let regex = try! NSRegularExpression(pattern: "(?<=fileURL: ).*(?=\s)")
for match in regex.matches(in: description, options: [], range: NSRange(location: 0, length: description.count)).lazy {
let url = String(description[Range(match.range, in: description)!])
if url.starts(with: "file://") { return url }
}
return nil
}
在 iOS 13.0 中,删除了 PHImageFileURLKey。为了访问 PHAsset 数据,当我们调用这个函数来请求图像数据时,我们可以通过这个键 PHImageFileUTIKey.
来获取图像信息PHImageManager.default().requestImageData(for: asset, options: PHImageRequestOptions(), resultHandler:{ [weak self] (imagedata, dataUTI, orientation, info) in
if let assetInfo = info, let fileURLKey = assetInfo["PHImageFileUTIKey"] as? NSString {
let fileComp = fileURLKey.components(separatedBy: ".")
if fileComp.count > 0 {
// Do your stuff.
}
})
如果有人希望在 Xamarin.iOS 上实现相同的功能,这是我的 swift 代码的 C# 版本:
phAsset.RequestContentEditingInput(new PHContentEditingInputRequestOptions(), phcontentediting);
然后:
private void phcontentediting(PHContentEditingInput contentEditingInput, NSDictionary requestStatusInfo)
{
}
调用phcontentediting
时,contentEditingInput有很多有用的信息,比如CreationDate
、FullSizeImageUrl
甚至Location
!
让资源 = PHAssetResource.assetResources(用于:self.phasset)
让url = resourse.first?.originalFilename
这对我有用!
如果有人在 Xamarin 中使用 RequestContentEditingInput 时需要文件大小。
var options = new PHContentEditingInputRequestOptions();
asset.RequestContentEditingInput(options, (PHContentEditingInput contentEditingInput, NSDictionary requestStatusInfo) =>
{
var imageUrl = contentEditingInput.FullSizeImageUrl.ToString();
NSObject fileSizeObj;
if (contentEditingInput.FullSizeImageUrl.TryGetResource(new NSString("NSURLFileSizeKey"), out fileSizeObj))
{
var fileSizeNSNum = fileSizeObj as NSNumber;
long fileSize = fileSizeNSNum.Int64Value;
}
// Make sure to dispose or your app will crash with a lot of photos!
contentEditingInput.Dispose();
});
您可以使用
let photoPath = photoAsset.localIdentifier
替换
let photoPath = info["PHImageFileURLKey"]