iOS开发图片合成,多张图片合成一张图片
一:前言:无demo说话不硬气,上github地址:https://github.com/horisea/PictureWhitening
欢迎star,你的星星是我持续创作的动力,在工具类里有所有的方法。
//图片合成处理//
/*** return 合成后的图片 (以坐标为参考点,不准确)* @param imageArray 图片数组 第一张图片位画布,所以最大* @param frameArray 坐标数组 */
+ (UIImage *)composeImageWithArray:(NSArray<UIImage *> *)imageArrayframeArray:(NSArray *)frameArray;
解释:这种是以视图为基础点写的方法,即是不管图片的大小,只考虑view所在的imageView的frame,来适配,
+ (UIImage *)composeImageWithArray:(NSArray<UIImage *> *)imageArray frameArray:(NSArray *)frameArray {if (imageArray.count == 0) { return nil; }if (imageArray.count == 1) { return imageArray.firstObject; }if (imageArray.count != frameArray.count) { return nil; }__block UIImage *image0;[imageArray enumerateObjectsUsingBlock:^(UIImage * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {if (obj.size.width == 0) {*stop = YES;image0 = idx == 0 ? obj : [imageArray objectAtIndex:idx - 1];}}];if (image0) {return image0;}NSMutableArray *arrayImages = imageArray.mutableCopy;NSMutableArray *arrayFrames = frameArray.mutableCopy;NSString *string = arrayFrames.firstObject;CGRect fristRect = CGRectFromString(string);UIImage *img0 = arrayImages.firstObject;CGFloat w0 = fristRect.size.width;CGFloat h0 = fristRect.size.height;// 以第一张的图大小为画布创建上下文UIGraphicsBeginImageContext(CGSizeMake(w0, h0));[img0 drawInRect:CGRectMake(0, 0, w0, h0)];// 先把第一张图片 画到上下文中for (int i = 1; i < arrayImages.count; i ++) {NSString *string2 = [arrayFrames objectAtIndex:i];CGRect secondRect = CGRectFromString(string2);UIImage *img1 = [arrayImages objectAtIndex:1];[img1 drawInRect:secondRect];// 再把小图放在上下文中}UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();// 从当前上下文中获得最终图片UIGraphicsEndImageContext();// 关闭上下文return resultImg;
}
下面说第二种:即是,我知道第一张图片的大小,但是传进来的子图片的坐标只是view的frame,和实际的宽高比都要适用,,这个时候我只要知道第一张图片的宽高压缩比,那么子图片对应的在第一张图片上的位置也就确定了。
/*** return 合成后的图片 (以坐标为参考点,准确)* @param mainImage 第一张图片位画布 (必传,不可空)* @param viewFrame 第一张图片所在View的frame(获取压缩比用) (必传,不可空)* @param imgArray 子图片数组 (必传,不可空)* @param frameArray 子图片坐标数组 (必传,不可空)*/
+ (UIImage *)composeImageOnMainImage:(UIImage *)mainImagemainImageViewFrame:(CGRect)viewFramesubImageArray:(NSArray *)imgArraysubImageFrameArray:(NSArray *)frameArray;
实现部分
+ (UIImage *)composeImageOnMainImage:(UIImage *)mainImagemainImageViewFrame:(CGRect)viewFramesubImageArray:(NSArray *)imgArraysubImageFrameArray:(NSArray *)frameArray {if (!mainImage) { return nil; }if (viewFrame.size.width == 0 || viewFrame.size.height == 0) { return nil; }if (imgArray.count == 0) { return nil; }if (imgArray.count == 1) { return imgArray.firstObject; }if (imgArray.count != frameArray.count) { return nil; }// 此处拿到缩放比例CGFloat widthScale = mainImage.size.width / viewFrame.size.width;CGFloat heightScale = mainImage.size.height / viewFrame.size.height;UIGraphicsBeginImageContext(CGSizeMake(mainImage.size.width, mainImage.size.height));[mainImage drawInRect:CGRectMake(0, 0, mainImage.size.width, mainImage.size.height)];int i = 0;for (UIImage *img in imgArray) {NSString *string = [frameArray objectAtIndex:i];CGRect fristRect = CGRectFromString(string);[img drawInRect:CGRectMake(fristRect.origin.x * widthScale, fristRect.origin.y * heightScale, fristRect.size.width, fristRect.size.height)];i+=1;}UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();return resultImg == nil ? mainImage : resultImg;
}
最后说明:个人推荐第二种方式比较准确,文章开头github地址有详细代码
iOS开发图片合成,多张图片合成一张图片相关推荐
- iOS开发-图片离线鉴黄 基于TensorFlow nsfw oc版
iOS开发-图片离线鉴黄 基于TensorFlow nsfw oc版 前言-基于TensorFlow鉴黄 效果 首先要引入Firebase 鉴黄类的封装 OC版本的鉴黄demo Swift版本的鉴黄 ...
- iOS开发 图片选择器、图片多选功能的实现
版权声明:本文为博主原创文章,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. Photos.framework是iOS8后苹果推出的一套替代AssetsLibrary.f ...
- iOS开发图片格式选择
图片是如何显示的 在讲解如何选择图片格式之前,我感觉有必要先了解下,图片是如何展示的.如果我们要展示一张图片,一般步骤是这样的: /// Assets.xcassets中的图片,不需要后缀 let i ...
- iOS开发图片控件(ImageView)绑定代码并显示一张图片
我在之前的一篇博客<iOS中如何显示一张图片>中谈到如何使用Image View来显示图片,这个操作是直接在Main.storyboard实现的.也就是说这张图片是写死在界面中了.但是在以 ...
- iOS开发图片纯色填充(两种方式)和缩小图片
UIImage图标换色和变换大小 这里的图片大都指只有两个色的图标,有时候我们的图标需要根据不同的状态显示不同的颜色,有一种简单的处理方式是,将不同状态的颜色图标都切出来,变换状态的时候直接使用相应的 ...
- IOS自定义图片浏览器,支持浏览多张图片,点击,双击,两手指缩放操作,并显示加载进度条
图片浏览器Controller的主要思路是:新建一个 JZAlbumViewController,在这个controller里主要显示一个UIScrollView,这个UIScrollView用来显示 ...
- iOS开发 - 图片实现多层折叠效果
为什么80%的码农都做不了架构师?>>> #效果 #Demo Demo地址:https://github.com/Resory/RYMutipleFoldImageView 如 ...
- iOS开发——图片转PDF的实现方法
2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/yiyaaixuexi/article/details/8209188 转载于:ht ...
- 【ios开发 -- 图片处理 -- 抠图】
在大多图像处理中,我们会应用到高斯模糊处理图像,通常用它来减少图像噪声以及降低细节层次.在此文中介绍了高斯模糊的实现和可选区域的模糊[美图秀秀-背景虚化] 高斯模糊的原理中,它是根据高斯曲线调节像素色 ...
- iOS开发---图片拉伸不变形
话不多说,直接上代码 //原始大小 UIImage *image1 = [UIImageimageNamed:@"mall_icon_y"]; UIButton *btn1 = [ ...
最新文章
- SAP PM (工厂维护)模块介绍 - SAP入门必看
- VS2008中代码段(Snippet)及代码段编辑
- python算法详解张玲玲电子版_算法之路该如何学习?
- 使用jmap命令手动导出映像文件?
- Haar特征与积分图—概念解析
- 利用微信公众号实现zabbix告警
- PHP_变量什么情况下加大括号{}
- mysql的dql_Mysql:dql(基本数据查询)
- 记录一次keil调试过程:自动识别GPS厂家芯片
- TMI 202107论文速递(IEEE Transactions on Medical Imaging)
- Code For Better 谷歌开发者之声——使用谷歌浏览器 Chrome 更好地调试
- 全媒体时代的速度与激情:香港凤凰卫视云端转型实践
- 三维空间两直线/线段最短距离、线段计算算法
- 推荐10个实用的程序员开发常用工具
- 百鸡问题用计算机什么法解决,《穷举法解决问题》教学设计
- Unity接入QuickSdk实战
- ROC曲线绘制相关R包下载和安装方式
- Android 自定义 Toast
- 【美股】美股中的几种分析形态
- python中构造方法 id自增_Python+MongoDB自增键值的简单实现
热门文章
- geem2登陆器修改服务器列表,Gee引擎怎么更换登陆器皮肤 GeeM2传奇编辑自定义皮肤的方法讲解...
- 为什么excel中取消隐藏行后仍然有隐藏的行
- 2017 多校4 Dirt Ratio
- 大数据软件的国内镜像
- java课程结课论文_Java技术综合课程设计论文
- (转)s3c6410 开发板Linux系统支持 K9GAG08U0E的方法
- 20190301 小中大
- 【渝粤题库】陕西师范大学163208 饭店管理 作业
- 2016-2017 ACM-ICPC, South Pacific Regional Contest (SPPC 16)
- java 清理页面缓存数据_清除浏览器缓存的几种方法总结(必看)