iOS App 大都有列表页,需要在列表项中显示图片。图片基本上是从服务端获取,如果服务端没有返回缩略图,对于小图片还好,列表滚动时不会有很大影响。然而从服务端获取的图片基本上都是大图,列表滚动就会造成卡顿的效果,这时就需要我们自己通过给定图片来获取缩略图。
通过以下代码实现:获取原始图片中间部分缩略图
- (UIImage *)getThumbnailWithTargetSize:(CGSize)targetSize {
CGSize imageSize = self.size;
if (CGSizeEqualToSize(targetSize, CGSizeZero)) {
return self;
}
if (targetSize.width > imageSize.width && targetSize.height > imageSize.height) {
return self;
}
CGFloat scale = MAX(targetSize.width / imageSize.width, targetSize.height / imageSize.height);
CGSize scaleSize = CGSizeMake(imageSize.width * scale, imageSize.height * scale);
UIGraphicsBeginImageContextWithOptions(targetSize, false, 0);
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, targetSize.width, targetSize.height)];
[bezierPath addClip];
CGRect rect = CGRectMake((targetSize.width - scaleSize.width) / 2, (targetSize.height - scaleSize.height) / 2, scaleSize.width, scaleSize.height);
[self drawInRect:rect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
网友评论