美文网首页
将一张图片绘制到另一张图片上

将一张图片绘制到另一张图片上

作者: Alienchang | 来源:发表于2015-12-21 14:26 被阅读138次

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

Paste_Image.png Screen Shot 2015-12-21 at 2.25.35 PM.png

第一张图片就是在一个自己绘制的全灰图片上再绘制一个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;
}

相关文章

网友评论

      本文标题:将一张图片绘制到另一张图片上

      本文链接:https://www.haomeiwen.com/subject/qbumhttx.html