gpt4 book ai didi

ios - 无法使用 PhotoKit 获得从相册请求的清晰图像

转载 作者:行者123 更新时间:2023-11-29 12:15:54 28 4
gpt4 key购买 nike

我正在使用 PhotoKit 来获取其中一个系统相册中的照片,如下所示:

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
PHFetchResult *fetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
[fetchResult enumerateObjectsUsingBlock:^(PHAssetCollection *collection, NSUInteger idx, BOOL *stop) {
NSLog(@"ALBUM NAME: %@", collection.localizedTitle);
if ([collection.localizedTitle isEqualToString:@"Camera Roll"]) {
PHFetchResult *photos = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
NSLog(@"PHOTOS: %ld", photos.count);
_photos = nil;
_photos = @[].mutableCopy;
for (PHAsset *asset in photos) {
[self loadImageFromPHAsset:asset];
}
}
}];

然后在我的自定义辅助方法中:(void)loadImageFromPHAsset:(PHAsset *)asset,我有这个:

-(void)loadImageFromPHAsset:(PHAsset *)asset
{
PHImageManager *manager = [PHImageManager defaultManager];
CGSize targetSize = _layout.itemSize;
[manager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info) {
[_photos addObject:result];
}];
[self.collectionView reloadData];
}

所以我有一组图像,我将它们呈现在我的 UICollectionViewCell 中:

UIImage *image = [_photos objectAtIndex:indexPath.row];
cell.imageView.contentMode = UIViewContentModeScaleAspectFill;
cell.imageView.image = image;

但是我得到的是这样的,很模糊,怎么才能看清楚呢? enter image description here

最佳答案

首先 targetSize 应该乘以 scale 来计算屏幕的比例,这样

CGFloat scale = [UIScreen mainScreen].scale;
CGSize targetSize = CGSizeMake(_layout.itemSize.width*scale, _layout.itemSize.height*scale);

其次,尝试这些选项以获得精确尺寸的图像,

//Async call returned on main thread, can return multiple times

PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.resizeMode = PHImageRequestOptionsResizeModeExact;

最后,如果你有性能问题,使用PHCachingManager,我已经回答了关于性能改进的问题here

希望对你有帮助。

编辑:

我没有意识到图像是存储在数组中的。尝试在图像选项中设置同步标志。

PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.synchronous = YES;
options.resizeMode = PHImageRequestOptionsResizeModeExact;

关于ios - 无法使用 PhotoKit 获得从相册请求的清晰图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32008325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com