美文网首页iOS开发攻城狮的集散地iOS开发-绘制iOS 开发继续加油
ios 本地图片合成,网络图片合成,视图转成图片,截屏功能实现

ios 本地图片合成,网络图片合成,视图转成图片,截屏功能实现

作者: HurryUpCheng | 来源:发表于2018-06-14 16:37 被阅读71次
QQ20180614-161704.gif
/**合成本地图片*/
UIImage *firstImage = self.firstImageView.image;
        
UIImage *secondImage = self.secondImageView.image;
            
 //以底部图片大小为画布创建上下文
UIGraphicsBeginImageContext(CGSizeMake(self.firstImageView.czh_width, self.firstImageView.czh_height));
//先把底部图片 画到上下文中
[firstImage drawInRect:self.firstImageView.frame];
//再把上面图片 放在上下文中
[secondImage drawInRect:self.secondImageView.frame];
//从当前上下文中获得最终图片
UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();
//关闭上下文   
UIGraphicsEndImageContext();  

合成网络图片
NSString *firstUrl = @"http://static.yygo.tv/avatar/2/5a712bc7790f2.png";
    
    NSString *secondUrl = @"http://static.yygo.tv/avatar/2/5a5756e2dd94b.png";
    
    //
    czh_dispatch_queue_async_safe(dispatch_get_global_queue(0, 0), ^{
    
        //
        NSData *fistData = [NSData dataWithContentsOfURL:[NSURL URLWithString:firstUrl]];
        
        UIImage *firstImage = [UIImage imageWithData:fistData];
        
        
        CGFloat firstImageW = 0;
        CGFloat firstImageH = 0;
        if (firstImage.size.height > 0 && firstImage.size.width > 0) {
            
            if (firstImage.size.height > firstImage.size.width) {
                firstImageW = ScreenWidth;
                firstImageH = firstImageW * firstImage.size.height / firstImage.size.width;
            } else {
                firstImageH = ScreenWidth;
                firstImageW = firstImageH * firstImage.size.width / firstImage.size.height;
            }
        }
        
        
        NSData *secondData = [NSData dataWithContentsOfURL:[NSURL URLWithString:secondUrl]];
        
        UIImage *secondImage = [UIImage imageWithData:secondData];
        
        
        CGFloat secondImageW = 0;
        CGFloat secondImageH = 0;
        if (secondImage.size.height > 0 && secondImage.size.width > 0) {
            
            if (secondImage.size.height > secondImage.size.width) {
                secondImageW = ScreenWidth;
                secondImageH = secondImageW * secondImage.size.height / secondImage.size.width;
            } else {
                secondImageH = ScreenWidth;
                secondImageW = secondImageH * secondImage.size.width / secondImage.size.height;
            }
        }
        

        //固定的大小为画布创建上下文
        UIGraphicsBeginImageContext(CGSizeMake(ScreenWidth, ScreenWidth));
        
        [firstImage drawInRect:CGRectMake((ScreenWidth - firstImageW)*0.5, (ScreenWidth - firstImageH)* 0.5, firstImageW, firstImageH)];//先把网络封面图片放在下面
        
        [secondImage drawInRect:CGRectMake((ScreenWidth - secondImageW * 0.5)*0.5, (ScreenWidth - secondImageH * 0.5)*0.5, secondImageW * 0.5, secondImageH * 0.5)];//再把小图放在上面
        
        //需要合成更多,继续添加
        
        UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();//从当前上下文中获得最终图片
        UIGraphicsEndImageContext();//关闭上下文
        
        czh_dispatch_main_sync_safe(^{
        
            [CZHShowSyntheticImageView czh_showSyntheticImageViewWithImage:resultImage];
        });
    
    
    });

//把视图生成图片
+ (UIImage *)czh_generateImageWithView:(UIView *)view {
    
    CGSize size = view.bounds.size;
    
    // 下面方法,第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了,关键就是第三个参数。
    
    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
    
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return image;
}

截图功能,首先监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];

然后获取当前页面生成图片
////截取当前屏幕
+ (UIImage *)czh_generateScreenShotImage {

    CGSize imageSize = CGSizeZero;
    imageSize = [UIScreen mainScreen].bounds.size;
    
    UIGraphicsBeginImageContextWithOptions(imageSize, NO, [UIScreen mainScreen].scale);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    for (UIWindow *window in [[UIApplication sharedApplication] windows]) {
        
        CGContextSaveGState(context);
        CGContextTranslateCTM(context, window.center.x, window.center.y);
        CGContextConcatCTM(context, window.transform);
        CGContextTranslateCTM(context, -window.bounds.size.width * window.layer.anchorPoint.x, -window.bounds.size.height * window.layer.anchorPoint.y);
        
        if ([window respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
            
            [window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES];
            
        } else {
            
            [window.layer renderInContext:context];
            
        }
        CGContextRestoreGState(context);
    }
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    NSData *imageData = UIImagePNGRepresentation(image);
    
    return [UIImage imageWithData:imageData];

}

博客地址
github地址

公司的项目.png

    公司的项目,求支持,如果发现什么问题,可以留言反应,感激不尽    

相关文章

  • ios 本地图片合成,网络图片合成,视图转成图片,截屏功能实现

    博客地址github地址     公司的项目,求支持,如果发现什么问题,可以留言反应,感激不尽    

  • 二维码中心logo简单合成

    可以图片绘制两个图片draw合成 也可以renderincontext 控件渲染 也可以截屏

  • iOS全景图像拼接实现

    本文为在iOS环境下利用OpenCV技术实现全景图片合成并对合成图片进行剪裁的简单实现。 Image Stitch...

  • Quartz 2D (2)

    1、圆形图片裁剪 2、实现手机屏幕截屏功能(把控制器中View的内容截屏生成一张新的图片) 3、图片截屏 4、图片...

  • iOS 图片处理方法

    1.图片合成 2.图片截屏 3.图片的磨玻璃效果 4.图片的压缩 //2.保持原来的长宽比,生成一个缩略图

  • 对图片的设置

    合成图片。下载图片。拉伸图片 //合成图片 UIImageView *imageView = [[UIImageV...

  • weex image组件显示合成后的图片

    项目中有个功能需要对图片进行合成,所以在ios下自定义了一个图片合成的mudule。由于weex的image组件的...

  • AVFoundation建立视频通道详解

    ios 视频的合成、剪辑、特效添加、合成图片、音频、边框 多视频合成等等,你想到的这些功能,第一步就是建立视频片段...

  • 图片合成

    两张图片拼接 参考:https://www.feiyeda.top/http://csshengyao.cn/

  • 图片合成

    前段时间遇到产品一个需求,在移动端上合成生成二维码,并且合成背景图和二维码给用户保存; 当时我在想,链接拼接生成二...

网友评论

    本文标题:ios 本地图片合成,网络图片合成,视图转成图片,截屏功能实现

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