- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经通读了最新的 iOS8 相框作品,我正在尝试从用户库中获取一些资源来显示。我让用户一次编辑 4 张图像。但正因为如此,我需要压缩图像,否则应用程序会崩溃。
我正在使用 PHImageManager 通过以下代码加载图像:
func processImages()
{
println("Processing")
_selectediImages = Array()
_cacheImageComplete = 0
for asset in _selectedAssets
{
var options:PHImageRequestOptions = PHImageRequestOptions()
options.version = PHImageRequestOptionsVersion.Unadjusted
options.synchronous = true
var minRatio:CGFloat = 1
if(CGFloat(asset.pixelWidth) > UIScreen.mainScreen().bounds.width || CGFloat(asset.pixelHeight) > UIScreen.mainScreen().bounds.height)
{
minRatio = min(UIScreen.mainScreen().bounds.width/(CGFloat(asset.pixelWidth)), (UIScreen.mainScreen().bounds.height/CGFloat(asset.pixelHeight)))
}
var size:CGSize = CGSizeMake((CGFloat(asset.pixelWidth)*minRatio),(CGFloat(asset.pixelHeight)*minRatio))
println("Target size is \(size)")
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize:size, contentMode: .AspectFill, options: options)
{
uiimageResult, info in
var image = iImage(uiimage: uiimageResult)
println("Result Size Is \(uiimageResult.size)")
}
}
}
如您所见,我正在计算目标大小以确保图像至少不大于屏幕。如果是,我会按比例缩小图像。然而,这是一个典型的打印日志
Target size is (768.0,798.453531598513) Result Size Is (1614.0,1678.0)
即使我将目标大小设置为 768x798(在那种特定情况下),它给我的结果 UIImage 也是两倍多。现在根据文档,targetSize 参数
“要返回的图像的目标大小。”
不是最清楚的解释,但根据我的实验,它不符合这个。
如果您有任何建议,我很乐意听取!
最佳答案
在 Swift
中,你想做这样的事情:
var asset: PHAsset!
var imageSize = CGSize(width: 100, height: 100)
var options = PHImageRequestOptions()
options.resizeMode = PHImageRequestOptionsResizeMode.Exact
options.deliveryMode = PHImageRequestOptionsDeliveryMode.Opportunistic
PHImageManager.defaultManager().requestImage(asset, targetSize: imageSize, contentMode: PHImageContentMode.AspectFill, options: options) {
(image, info) -> Void in
// what you want to do with the image here
print("Result Size Is \(image.size)")
在 Objective-C
中,它看起来像这样:
void (^resultHandler)(UIImage *, NSDictionary *) = ^(UIImage *result, NSDictionary *info) {
// what you want to do with the image
};
CGSize cellSize = CGSizeMake(100, 100);
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.resizeMode = PHImageRequestOptionsResizeModeExact;
options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
[[PHImageManager defaultManager] requestImageForAsset:self.imageAsset targetSize:cellSize contentMode:PHImageContentModeAspectFill options:options resultHandler:resultHandler];
重要说明:使用随机交付模式,结果 block 可能会以不同的大小被多次调用,但最后一次调用将是您想要的大小。最好使用 Opportunistic,这样 UI 将首先加载低质量的占位符,然后在操作系统生成更好的图像(而不是空白方 block )时更新它。
关于ios - 从 'requestImageForAsset' 返回的 UIImage 大小甚至不接近 'targetSize' 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26663258/
对于某些视频,requestImageForAsset 以 nil 的 UIImage 完成。对于其他视频,它工作正常,我还没有弄清楚为什么。 func createThumbnailForVideo
我正在使用图像选择器库来允许用户从他们的照片库中选择许多图像。它们以 PHAssets 数组的形式返回。然后,我想将所有 PHAssets 转换为 UIImages 并将它们写入应用程序的存储。 目前
在照片框架中,我正在尝试查看使用 PHImageManager 中的 RequestImageFor Asset 方法的教程。 这是一段代码: let asset:PHAsset = self
我有一个 UICollectionView 的问题,我认为我已经缩小到以下区域。问题是,当我在 UICollectionView 上调用重新加载时,会出现闪烁,加载 1 张图像,然后加载正确的图像。几
所以我使用 SwipeView 库 ( https://github.com/nicklockwood/SwipeView ) 来显示使用 iOS8 Photos 框架的图像。 但是,当我调用 req
所以,我遇到了一个奇怪(且令人沮丧)的问题。我正在循环访问图像选择器返回的一组资源: let manager = PHImageManager.defaultManager() let options
我正在使用 Photos 框架在 iOS swift 中处理图像。当我尝试使用 PHImageManager.defaultImanager().requestImageForAsset() 获取图像
我有一个展示照片库图像列表的收藏 View ,在选择时,我想获取最高质量的版本并提供一个 Controller 来裁剪它。 我的收藏 View 的调用工作正常:。 let options = PHIm
我尝试使用方法 requestImageForAsset 获取照片。使用选项: auto options = [PHImageRequestOptions new]; options.resizeMo
大约 10% 的时间 PHImageManager.defaultManager().requestImageForAsset 在第一次返回有效但“降级”的 UIImage 后返回 nil 而不是有效
我已经通读了最新的 iOS8 相框作品,我正在尝试从用户库中获取一些资源来显示。我让用户一次编辑 4 张图像。但正因为如此,我需要压缩图像,否则应用程序会崩溃。 我正在使用 PHImageManage
如问题所述,如果我在任何运行 iOS 9 或更高版本的设备上执行 RequestImageForAsset(在 iPhone 5s、6 和 6s Plus 上试过),当我尝试检索以 1:1 拍摄的照片
我正在尝试使用 UIPageViewController 显示图像,使用来自苹果的示例代码并将其替换为新的照片工具包:PHAsset https://developer.apple.com/libra
我是一名优秀的程序员,十分优秀!