我的项目里面有两处是用到了这个技术,一个是加载图片时的placeholder图片,还有一个是视频的展示图片 ,例子:


第一张图片就是在一个自己绘制的全灰图片上再绘制一个logo图片
第二张是将播放按钮图片绘制到视频展示图片上
//示例为第一张图片的实现代码,大概思路一样
+ (UIImage *)imageOfPlaceholderInSize:(CGSize)size {
NSString *imageName = [NSString stringWithFormat:@"PlaceholderImage%f%f",size.width,size.height];
//避免每次使用图片都要重新绘制图片,因为会占用很多资源,所以我使用SDWebImage做了图片缓存
UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imageName];
if (image) {
return image;
}else{
image = [UIImage drawImage:[AppSkin ImageOfPlaceHolderCenterIcon]
inSize:size inputImageSize:CGSizeMake(375 /2.5, 156 / 2.5)
withBackgroundColor:[AppSkin colorOfUnable]];
[[SDImageCache sharedImageCache] storeImage:image forKey:imageName];
return image;
}
}
//UIImage category
+ (UIImage *)drawImage:(UIImage *)inputImage inSize:(CGSize)size inputImageSize:(CGSize)inputImageSize withBackgroundColor:(UIColor *)bgColor
{
if (CGSizeEqualToSize(size, CGSizeZero)) {
return nil;
}
UIGraphicsBeginImageContextWithOptions(CGSizeMake(size.width, size.height), YES, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGRect aRectangle=CGRectMake(0, 0, size.width + 1.f, size.height + 1.f);
[bgColor setFill];
UIRectFill(aRectangle);
[inputImage drawInRect:CGRectMake((size.width - inputImageSize.width /inputImage.scale)/2, (size.height - inputImageSize.height/inputImage.scale)/2, inputImageSize.width/inputImage.scale, inputImageSize.height/inputImage.scale)];
UIGraphicsPopContext();
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
网友评论