SDWebImage获取到UIImage分辨率跟原图不一样

在使用SDWebImage的sd_setImageWithURL方法获取UIImage时,发现图片的size与原图不一致。SDWebImage根据设备屏幕的scale进行了2x、3x的自动缩放。在SDWebImageCompat.m文件中,可以看到代码会检查图片是否有@2x或@3x的标记,并调整UIImage的scale属性,从而导致尺寸变化。如果需要原始尺寸的图片,可能需要进一步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 使用[imageView sd_setImageWithURL:url placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){

        }];

获取到UIImage,发现UIImagesize跟原图大小不一样。看代码应该是根据不同机型做了2x3x缩放。具体可以看SDWebImageCompat.m文件:



inline UIImage *SDScaledImageForKey(NSString *key, UIImage *image) {

    if (!image) {

        return nil;

    }

    

    if ([image.images count] > 0) {

        NSMutableArray *scaledImages = [NSMutableArray array];


        for (UIImage *tempImage in image.images) {

            [scaledImages addObject:SDScaledImageForKey(key, tempImage)];

        }


        return [UIImage animatedImageWithImages:scaledImages duration:image.duration];

    }

    else {

        if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {

            CGFloat scale = [UIScreen mainScreen].scale;

            if (key.length >= 8) {

                NSRange range = [key rangeOfString:@"@2x."];

                if (range.location != NSNotFound) {

                    scale = 2.0;

                }

                

                range = [key rangeOfString:@"@3x."];

                if (range.location != NSNotFound) {

                    scale = 3.0;

                }

            }


            UIImage *scaledImage = [[UIImage alloc] initWithCGImage:image.CGImage scale:scale orientation:image.imageOrientation];

            image = scaledImage;

        }

        return image;

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值