问题标签 [phasset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
603 浏览

ios - 是否可以在没有警报视图的情况下从 iPhone 中删除照片?

我使用这种方法:

此方法的效果是将资产中包含的照片丢弃。但每次我这样做时,都会出现一个警告视图,上面写着“允许“应用程序”删除 x 张照片?” 出现

是否有禁用此警报视图的解决方案?或者用其他时刻出现的个人警报视图替换此警报视图?

0 投票
3 回答
2858 浏览

ios - 确定 iOS 设备上可用的最大 PHAsset 图像大小

如何确定PHAssetiOS 设备上可用的最大图像尺寸,其中“可用”是指当前在设备上,不需要从 iCloud 照片库进行任何网络下载?

我一直在开发一个应用程序,其中一组缩略图显示在一个UICollectionView(很像照片应用程序)中,然后用户可以选择一个图像来查看它的全尺寸。如有必要,将从 iCloud 下载完整大小的图像。但是,我想向用户展示图像的最大可能版本,直到完整尺寸可用。

照片框架的工作方式相当奇怪:

在集合视图中,我使用186x186 像素(由于视网膜缩放而使尺寸加倍)PHCachingImageManager缓存(以及后来的请求)图像。targetSizeUICollectionViewCell

效果非常好,滚动速度非常快,并且在用图像填充单元格时没有延迟。检查返回图像的大小,它们都是大约 342x256 像素。那是在我的 iPhone 6 上启用了 iCloud 照片库并启用了“优化存储”,因此对于大多数图像来说,设备上只存储了小缩略图。

然而,奇怪的是,如果我随后请求任何图像的全尺寸(或更大)版本,无论是使用该选项PHCachingImageManager还是PHImageManager.defaultManager()使用该PHImageRequestOptionsDeliveryMode.Opportunistic选项,返回的第一张(低质量)图像是一个看起来很小的 60x45 像素邮票全屏显示太可怕了,直到最终下载完整尺寸的图像来替换它。

显然,设备上已经更大的缩略图 (342x256),因为它们刚刚显示在集合视图中!那么为什么在下载完整尺寸之前它不将它们作为第一个“低质量”图像返回?为了确保 342x256 图像确实已经在设备上,我在飞行模式下运行了代码,因此没有发生网络访问。

我发现,如果我请求任何最大为 256x256 的尺寸,我会返回 342x256 的图像。一旦我变大(甚至 1 像素),它首先会返回 60x45 图像,然后尝试下载完整尺寸的图像。

我已经更改了我的代码,首先发出一个 256x256 的请求,然后是一个完整尺寸的请求PHImageRequestOptionsDeliveryMode.HighQualityFormat(它不会返回一个微小的中间图像),而且效果很好。这也是 iOS 照片应用程序必须做的事情,因为它在下载完整图像时会显示相对高质量的缩略图。

那么,在这样的背景下,我怎么知道设备图像的最大尺寸是PHAsset多少?256x256 是一个神奇的数字,还是取决于 iCloud 照片库如何优化空间(基于库的大小和可用的设备存储空间)?

当然,这似乎是一个错误,照片框架没有返回当前可用的最大图像(当被要求提供比当前更大的尺寸时),并且要获得最大尺寸,您必须要求该尺寸或更小,因为如果你要求更大,你会得到一个 60x45 的缩影!奇怪。

更新:提交给 Apple 的错误报告:https
://openradar.appspot.com/25181601 演示错误的示例项目:https ://github.com/mluisbrown/PhotoKitBug

0 投票
1 回答
1654 浏览

swift - 如果类型设置为专辑,PHAssetCollection fetchAssetCollectionsContainingAsset 返回 nil

我正在尝试通过资产访问 AssetCollection。执行代码时,照片框架返回 nil。仅供参考:资产是用 iPhone 相机点击的图片,因此,它存储在相机胶卷下。

77AF0C78-242A-4979-8A7B-7CFF04014C54/L0/001 致命错误:在展开可选值时意外发现 nil

如果我将类型更改为 Moment,问题就会消失。

Apple文档中的常量信息说:

相册 - 照片应用程序中的相册。相册可以在照片应用程序中创建,也可以通过 iTunes 同步出现在 iOS 设备上。

SmartAlbum - 内容动态更新的智能相册。照片应用程序显示内置智能相册以对某些类型的相关资产进行分组(请参阅资产集合子类型)。

时刻 - 照片应用程序中的时刻。照片应用程序会自动创建时刻以按时间和位置对资产进行分组。

这意味着相册下的相机胶卷不是相册而是片刻?我真的很困惑。

0 投票
2 回答
964 浏览

ios - 从用户照片库中获取最后一张照片,返回两张照片

使用以下代码时,它会获取我的最后一张图片,但会复制它。它总是得到最后一张图片,但它成对返回:

为什么会发生这种情况?以下是日志语句:

这发生在模拟器和设备上。不使用第 3 方软件,没关系,我想。为什么会被调用两次?我在 uialertaction 块中调用它

0 投票
0 回答
125 浏览

ios - “PHAssetCollectionSubtypeAlbumSyncedAlbum”不返回从 Mac 的照片同步的照片

我不知道如何将通过 iTunes 与 Mac 版照片同步到 iPhone 上的照片显示在基于 PHAsset 的交互中。

自专辑子类型以来,我都尝试过,但它不起作用。它只显示相机胶卷,以及由我拥有的应用程序创建的各种其他相册。

我在 8.x 和 9.x 上都试过了。有什么解决办法吗?

0 投票
0 回答
247 浏览

ios - iOS:在 PHAsset 的照片之间滚动时的扫视

我在 scrollViewDidScroll() 方法中放入了从 PHAsset 中提取图像以显示在视图上的方法。我对当前图像、上一个图像和下一个图像执行此操作。所以我每次加载 3 张图片。当我滚动时,我会破坏不使用的图像。

但是当我在视图之间滚动时,我有一点震动。我认为这是因为要显示的照片正在从 PHAsset 加载到我的视图中。

我能做些什么来解决这个问题?

这是我输入 scrollViewDidScroll() 方法时为照片收费的代码(页面是图像的编号):

0 投票
1 回答
198 浏览

ios - 是否可以在没有 PHAsset 的情况下将照片存储在 iPhone 上?

是否可以在不使用 PHAsset 的情况下获取存储在 iPhone 上的照片?

这是因为使用 PHAsset 迫使我使用这种方法:

而且这种方法需要时间来执行。

我只想直接从存储它们的文件夹中获取图像。

0 投票
4 回答
3376 浏览

ios - 如何在 iCloud Drive 上生成图像缩略图?

这看起来很容易,但缺乏文档使得这个问题无法猜测。

我的应用程序的 icloud 驱动器上有图片和视频,我想创建这些资产的缩略图。我说的是 iCloud Drive 上的资产,而不是相机胶卷内的 iCloud 照片流。我说的是真正的 iCloud Drive 文件夹。

与图像相比,从视频创建缩略图“容易”。你只需要 2 周的时间来弄清楚它是如何工作的,考虑到苹果写的糟糕的文档,但图像中的缩略图似乎是不可能的。

我现在拥有的是一组NSMetadataItems,每个都描述 iCloud 文件夹上的一个项目。

这些是我迄今为止尝试过的不起作用的方法:


方法一

这种方法的结果非常棒。准备好了吗?我们开始:success = YESerror = nilthumbnail = nil


另一种方法

error = The requested URL was not found on this server.thumbnail = nil

此方法似乎仅适用于视频。我正在尝试这个以防万一。这种方法与图像等效吗?


原始方法

NOPE - 数据 = 无


方法 4

第四种可能的方法是使用ALAsset,但在 iOS 9 上已弃用。

我认为所有这些方法都失败了,因为如果资源是本地的,它们就可以工作(无论错误与否)。关于如何下载图像以便获得缩略图的任何想法?

还有其他想法吗?

谢谢


编辑:经过几次测试,我发现方法 1 是唯一似乎朝着正确方向的方法。这种方法效果不佳,有时会抓取图标,但大部分时间都不起作用。


还有一点就是这个。无论人们向我建议什么,他们总是说要下载整个图像以获取缩略图。我不认为这是要走的路。看看如何获​​取视频缩略图。您无需下载整个视频以获取其缩略图。

所以这个问题仍然悬而未决。

0 投票
1 回答
810 浏览

ios - 从 Swift 中的相机胶卷连拍中删除单张照片

所以我有代码可以从相机胶卷中删除图像。它工作正常,并且可以从连拍中删除单个图像,但是其中一个图像如果被删除,将删除整个批次,我不知道如何阻止它。它通常似乎是连拍组中的最后一张图像。在我的请求选项中,我打开了includeAllBurstAssets.

0 投票
2 回答
4380 浏览

ios - 从 PHAsset 获取缩略图

我正在尝试从 PHAsset 获取缩略图以及其他一些信息。这是一个简化的代码片段。

对于我从相机胶卷中检索到的所有图像,请执行以下操作:

在这个阶段我有两个问题:

  1. 最重要的一个,但我想这是随之而来的。它需要太多的处理能力和从光盘读取。它在模拟器中运行良好。但是当我在具有 300-500 张图像的测试设备(iPhone 5、4S)上运行它时,它会冻结一两分钟,同时获取所有图像。我猜它会一一读取整个集合,调整它的大小并获取所有这些信息。有没有更简单的方法?就像使用 ALAsset 一样,我可以直接得到缩略图,它飞得很快。
  2. 由于某种原因,它做了两次工作。首先它给了我我想要的东西,小缩略图~ 60 * 40 或大约。一旦它给了我,几秒钟后它会进入另一个循环并开始检索更高分辨率的图像,比如 960 * 640 左右,这就是发生冻结的地方。我不确定为什么会这样,但确实如此。

对这两个问题的任何意见将不胜感激。