Получить уменьшенные изображения в списке и полноразмерное изображение при нажатии на элемент списка
Поэтому я использую код ниже, чтобы получить все изображения из библиотеки, которая работает нормально:
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, но я не нашел способа получить оригинальное изображение, когда нажимал на любое изображение. Я хочу получить исходное изображение (полноразмерное изображение), когда пользователь нажимает на любое уменьшенное изображение, которое заполняется в UICollectionView.
Спасибо.
2 ответа
Чтобы загрузить миниатюру изображения.
Получил решение после того, как сделал слишком много вещей, может быть, это может помочь другим. Ниже приведены шаги, чтобы сделать это.
Шаг 1: объявить объект PHFetchResult
var Galleryimages: PHFetchResult<PHAsset>!
Шаг 2: Получить результаты из галереи, используя следующий код:
func grabPhotos(){
Galleryimages = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: nil)
}
Шаг 3: Показать миниатюры изображений в вашем пользовательском интерфейсе (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 можно получить оригинальное изображение с его оригинальным размером. а для просмотра вашей коллекции вы можете сделать из нее миниатюру и отобразить изображения. Таким образом, когда пользователь нажимает на миниатюру, теперь вы можете показать оригинальное изображение
Пожалуйста, используйте autoreleasepool для управления памятью.
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
}