当点击列表中的项目时,获得列表和全尺寸图像的缩略图
所以我使用下面的代码来获取所有图像库中的工作正常:
func grabPhotos(){ let imgManager = PHImageManager.default() let requestOptions = PHImageRequestOptions() requestOptions.isSynchronous = true requestOptions.deliveryMode = .highQualityFormat let fetchOptions = PHFetchOptions() fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] if let fetchResults : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions){ if fetchResults.count>0{ for i in 0..<fetchResults.count{ imgManager.requestImage(for: fetchResults.object(at: i), targetSize: CGSize(width:100, height: 100), contentMode: .aspectFill, options: requestOptions, resultHandler: { image, error in self.Galleryimages.append(image!) print("array count is ",self.Galleryimages.count) self.photoCollectionview.reloadData() }) } } } }
我在我的UICollectionView中显示所有的图像,但是我没有find任何方式来获得原始图像,每当点击任何缩略图图像。 当用户点击在UICollectionView中填充的任何缩略图时,我想获取原始图像(全尺寸图像)。
谢谢。
加载缩略图图像。
做了太多东西之后得到了解决办法,可能会对别人有帮助。 以下是执行此操作的步骤。
步骤1:声明PHFetchResult的对象
var Galleryimages: PHFetchResult<PHAsset>!
第2步:使用以下代码从图库中获取结果:
func grabPhotos(){ Galleryimages = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: nil)
}
第3步:使用以下代码在UI(collectionview / Tableview)中显示缩略图:
let imageview = cell.viewWithTag(1) as! UIImageView PHImageManager.default().requestImage(for: (Galleryimages?[indexPath.row])!, targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: nil) { (image: UIImage?, info: [AnyHashable: Any]?) -> Void in imageview.image = image }
第4步:最后使用下面的代码得到全尺寸的图像。
let options = PHImageRequestOptions() options.deliveryMode = .highQualityFormat options.resizeMode = .exact PHImageManager.default().requestImage(for: (Galleryimages[indexPath.row]), targetSize: PHImageManagerMaximumSize, contentMode: .aspectFill, options: options) { (image: UIImage?, info: [AnyHashable: Any]?) -> Void in if let image = image { //Use this originan image } }
当您从PHAsset中获取图像时,您正在调整图像大小。 所以使用
targetsize : PHImageManagerMaximumSize
从这个U可以得到与原始大小的原始图像。 并为您的collectionview你可以direclty从它缩略图和显示图像。 所以当用户点击缩略图时,现在你可以显示原始图像
请使用autoreleasepool进行内存pipe理。
for(PHAsset *asset in self.assets) { // This autorelease pool seems good (a1) autoreleasepool { NSLog(@"started requesting image %i", i); [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeAspectFit options:[self imageRequestOptions] resultHandler:^(UIImage *image, NSDictionary *info) { dispatch_async(dispatch_get_main_queue(), ^{ //you can add autorelease pool here as well (a2) @autoreleasepool { assetCount++; NSError *error = [info objectForKey:PHImageErrorKey]; if (error) NSLog(@"Image request error: %@",error); else { NSString *imagePath = [appDelegate.docsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%i.png",i]]; NSData *imageData = UIImagePNGRepresentation(image); if(imageData) { [imageData writeToFile:imagePath atomically:YES]; [self.imagesArray addObject:imagePath]; } else { NSLog(@"Couldn't write image data to file."); } [self checkAddComplete]; NSLog(@"finished requesting image %i", i); } } //a2 ends here }); }]; i++; } // a1 ends here }