QBImagePicker icon indicating copy to clipboard operation
QBImagePicker copied to clipboard

All Library Images are shown blurred

Open deepak802sharma opened this issue 9 years ago • 10 comments

When we open the QBImagePicker to select multiple images, All the images have blurred thumbnails. img_0463

deepak802sharma avatar Aug 06 '15 05:08 deepak802sharma

QBAssetsViewController.m ---> line 451 ---> When first run self.traitCollection no value

My code:

UIWindow *window = [UIApplication sharedApplication].windows.firstObject;
    CGFloat fixValue;
    if (self.traitCollection.displayScale != 0) {
        fixValue = self.traitCollection.displayScale;
    } else {
        fixValue = window.traitCollection.displayScale;
    }

    CGSize targetSize = CGSizeScale(itemSize, fixValue);

wangbiye avatar Oct 08 '15 07:10 wangbiye

@wangbiye When i add this lines i solve the problem ?.. because i to have the same problem.... Can you help me..... i am doing in swift...

sreeji44 avatar May 29 '16 07:05 sreeji44

@sreeji44 I just change a place, which is the relevant code changes after me, but it is Objective-C.


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    QBAssetCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"AssetCell" forIndexPath:indexPath];
    cell.tag = indexPath.item;
    cell.showsOverlayViewWhenSelected = self.imagePickerController.allowsMultipleSelection;

    // Image
    PHAsset *asset = self.fetchResult[indexPath.item];
    CGSize itemSize = [(UICollectionViewFlowLayout *)collectionView.collectionViewLayout itemSize];

    /*
    change here
    */
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    CGFloat fixValue;
    if (self.traitCollection.displayScale != 0) {
        fixValue = self.traitCollection.displayScale;
    } else {
        fixValue = window.traitCollection.displayScale;
    }

    CGSize targetSize = CGSizeScale(itemSize, fixValue);
    [self.imageManager requestImageForAsset:asset
                                 targetSize:targetSize
                                contentMode:PHImageContentModeAspectFill
                                    options:nil
                              resultHandler:^(UIImage *result, NSDictionary *info) {
                                  if (cell.tag == indexPath.item) {
                                      cell.imageView.image = result;
                                  }
                              }];

    // Video indicator
    if (asset.mediaType == PHAssetMediaTypeVideo) {
        cell.videoIndicatorView.hidden = NO;

        NSInteger minutes = (NSInteger)(asset.duration / 60.0);
        NSInteger seconds = (NSInteger)ceil(asset.duration - 60.0 * (double)minutes);
        cell.videoIndicatorView.timeLabel.text = [NSString stringWithFormat:@"%02ld:%02ld", (long)minutes, (long)seconds];

        if (asset.mediaSubtypes & PHAssetMediaSubtypeVideoHighFrameRate) {
            cell.videoIndicatorView.videoIcon.hidden = YES;
            cell.videoIndicatorView.slomoIcon.hidden = NO;
        }
        else {
            cell.videoIndicatorView.videoIcon.hidden = NO;
            cell.videoIndicatorView.slomoIcon.hidden = YES;
        }
    } else {
        cell.videoIndicatorView.hidden = YES;
    }

    // Selection state
    if ([self.imagePickerController.selectedAssets containsObject:asset]) {
        [cell setSelected:YES];
        [collectionView selectItemAtIndexPath:indexPath animated:NO scrollPosition:UICollectionViewScrollPositionNone];
    }

    return cell;
}

wangbiye avatar May 29 '16 08:05 wangbiye

@wangbiye actually i am using the objective c version and converted the code thats all... so QBassetviewcontroller.m page i want to change it right... ok thankz a lot.....

sreeji44 avatar May 29 '16 09:05 sreeji44

@wangbiye thankz its works

sreeji44 avatar May 30 '16 05:05 sreeji44

I'm sorry, my English is bad, I cannot quickly understand what you mean. @sreeji44

wangbiye avatar May 30 '16 05:05 wangbiye

@wangbiye its ok.. Your code work for me. :)

sreeji44 avatar May 30 '16 05:05 sreeji44

CGSize targetSize = CGSizeScale(itemSize, fixValue);

This is showing error,

jankarrajpara avatar Sep 04 '18 09:09 jankarrajpara

It worked for me when I changed this:

PHImageRequestOptions* options = [[PHImageRequestOptions alloc] init]; options.synchronous = YES; options.networkAccessAllowed = YES; options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

It was options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat before. It used to work even without this though.

mrharsh2804 avatar Jan 08 '20 20:01 mrharsh2804

This might be super late but can help people in future. Adding a multiplier in QBAssetViewController is the solution that worked for me at line 450. CGSize targetSize = CGSizeScale(itemSize, self.traitCollection.displayScale*4); //self.traitCollection.displayScale = 2. This is a default set in iOS 13.2 (or somewhere around that)

multiplying it by 4 increases the resolution and you see clearer images.

mrharsh2804 avatar Feb 12 '20 15:02 mrharsh2804