- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 UIImage
转换为 PHAsset
但找不到任何解决方案。我发现的只是反之亦然(即 PHAsset
到 UIImage
)。
场景是,我从自定义目录中获取图像到 PHAssetCollection
中并显示在 UICollectionView
中。我还想在此处包含来自先前屏幕的更多图像,这些图像来自远程源。我不想将远程图像保存到我的目录中,而是想将它们包含在我的 UICollectionView
中。
请给我建议解决方案或一些好的替代方案,以便 UICollectionView
的来源相同(即 PHAssetCollection
)
最佳答案
聚会有点晚了,但我会为 future 的人发布我的答案。
我在我的应用中所做的是截取屏幕截图并保存到照片应用中的专用相册。
以下示例中的getAlbum()
只是一个检索相册的辅助方法。
ImageStoreItem
只是一个包含两个字段的包装器:image: UIImage
和 id: String
作为原始 PHAsset 的标识符
。
/**
Saves the image to the album in the Photos app.
- Throws:
- `ImageStore.TypeError.accessDenied`
if the user has denied access to the photo library.
- An error thrown by `PHPhotoLibrary`.
*/
func saveImage(_ image: UIImage) throws {
let album = try getAlbum()
try PHPhotoLibrary.shared().performChangesAndWait {
let imgReq = PHAssetChangeRequest.creationRequestForAsset(from: image),
albReq = PHAssetCollectionChangeRequest(for: album)!
albReq.addAssets([imgReq.placeholderForCreatedAsset] as NSFastEnumeration)
}
}
/**
Fetches images in the app album.
- Throws:
- `ImageStore.TypeError.accessDenied`
if the user has denied access to the photo library.
- An error thrown by `PHPhotoLibrary`.
- `NSError` thrown by `PHImageManager`
if fetching images from the `PHAsset` list failed.
- `Globalerror.unknown` if no image was fetched,
but there is no corresponding error object.
- Returns:
An array of `ImageStoreItem`s with the album items.
*/
func getImages() throws -> [ImageStoreItem] {
let album = try ImageStore.shared.getAlbum(),
assets = PHAsset.fetchAssets(in: album, options: nil)
let size = UIScreen.main.bounds.size,
opt = PHImageRequestOptions()
opt.isSynchronous = true
var res = [ImageStoreItem]()
var err: Error? = nil
let handler: (PHAsset) -> (UIImage?, [AnyHashable : Any]?) -> Void =
{ (asset) in
{ (image, info) in
if let image = image {
let item = ImageStoreItem(image: image,
id: asset.localIdentifier)
res.append(item)
} else if let info = info {
if let error = info[PHImageErrorKey] {
err = error as! NSError
} else {
var userInfo = [String : Any]()
for (key, value) in info {
userInfo[String(describing: key)] = value
}
err = GlobalError.unknown(info: userInfo)
}
}
}
}
assets.enumerateObjects { (asset, _, _) in
PHImageManager.default()
.requestImage(for: asset,
targetSize: size,
contentMode: .default,
options: opt,
resultHandler: handler(asset))
}
if let error = err { throw error }
return res
}
documentation on the PhotoKit不是太令人印象深刻,但在这里和那里看一看,您就会掌握它的窍门。
关于ios - UIImage 到 PHAsset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37043933/
我正在尝试获取相册中的所有照片 (PHAssets) 并将它们附加到一个数组中,以便我可以将其作为完成参数传递。 代码在包含 arrayOfPHAsset.append(asset) 的行崩溃。为什么
public func nohanaImagePicker(_ picker: NohanaImagePickerController, didFinishPickingPhotoKitAssets
我曾经使用 ALAssetLibrary。它有 assetForURL 功能,这样我就可以将 URL 保存到 NSUserDefaults 并在应用程序重新启动后通过 URL 检索 ALasset。
在 iOS 14 测试版中,有没有办法检查应用程序是否有权加载 PHAsset在尝试使用 PHImageManager.requestImage? 加载之前的图像这是给 PHAuthorization
我用过 `NSURL *urlA = [info valueForKey:@"PHImageFileURLKey"];` 但是当我尝试使用 URL 保存图像时,URL 为 nil。 `NSDat
我想添加 HDR 图标以指示某些 Assets 是 HDR,但如果这是来自 iphone12 的 HDR 视频记录,我无法获取任何信息来检查视频 最佳答案 + (BOOL)isHDRVideo:(
我有这个奇怪的错误,不知道如何修复它。 我的代码在 Xcode 7.3 中运行良好。但是,在更新到 Xcode 8 之后,我收到了将近 17 个错误和 21 个警告。这可能是 Swift 3 中的一些
在 iOS 的照片框架中,为了请求一组具有特定过滤器的 PHAssets,您可以使用 fetchAssetsWithOptions:options 并传递 >PHFetchOptions 对象与所
PHAsset creationDate返回一个NSDate,该NSDate的构造就像所有照片都是在同一“主”时区中拍摄的一样。例如,在给定的iPhone上,在纽约下午4点拍摄的照片与在加利福尼亚州下
我想知道如何复制 PHAsset并保留照片的上下文。例如,如果照片位于特定相册中,我希望副本位于同一个相册中,紧邻原始相册。如果可能,将保留编辑历史记录,允许用户在需要时将该副本恢复为原始版本。 可以
在 iOS8 上使用照片应用程序时,您可以在查看每张特定照片时看到位置标题。例如“Home”或“Central Park”——如何从 PHAsset 或类似类中获取数据/字符串? 我没有在 PHAss
在 Objective-C 中,我想在后台将所有 PHAssets(图像和视频)上传到我的服务器。任何人都可以建议我该怎么做吗? 最佳答案 let mPhasset : PHAsset = PHAss
我正在使用名为 BSImagePicker 的第三方库从照片库中选择多张图像。我可以设置要选择的最大 PHAssets,但是当我显示 BSImagePickerController 以选择更多照片时,
是否可以将新的 PHAsset 插入相机胶卷中的指定索引? 我试过以下: let cam_req = PHAssetCollectionChangeRequest(for: camera_roll)
保存图像后如何获取图像的 PHAsset,以便将 Assets 的本地标识符保存到我的存储解决方案中并在以后使用图像? 最佳答案 我从来没有这样做过,但我想有一个 PhotoKit 方法允许检索最近保
我看到对于 PHContentEditingInput ( https://developer.apple.com/library/prerelease/ios/documentation/Photo
我正在使用 UIImagePickerController 来允许用户使用相机拍照。当代表被调用时,我想将图像保存到照片库/相机胶卷,我使用 PHAssetChangeRequest 来完成。问题是文
请问有没有办法用PHAsset获取原始文件名? 我使用以下代码提取文件信息。 [[PHImageManager defaultManager] requestImageDataForAsset:
我正在使用 UIImageWriteToSavedPhotosAlbum 将图像保存到照片应用程序。这是我发现的唯一可以让您执行此操作的功能。 这是我的代码: import UIKit import
我想对用户的照片库做一些工作。由于图书馆可能很大,我想在后台进行。我想知道执行 Assets 获取(如 PHAsset.fetchAssets )并在后台处理它们是否安全? 我现在只需要 Assets
我是一名优秀的程序员,十分优秀!