当前位置: 首页 > news >正文

iOS 提取图片的主题色,并支持灵活提取

遇到一个需求,要提取图片中的色调,但还有一点特殊的需求,就是不是提取颜色最多的色调,也不是平均的色调,是图片中偏暗的色调
这就需要我们动态的调整我们提取的算法,
下面就看代码

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{// 第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;CGSize thumbSize = CGSizeMake(100, 100*self.backgroundImgView.height/(self.backgroundImgView.width ?: 100));CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();CGContextRef context = CGBitmapContextCreate(NULL,thumbSize.width,thumbSize.height, 8, thumbSize.width*4, colorSpace,bitmapInfo);CGRect drawRect = CGRectMake(0, 0, thumbSize.width, thumbSize.height);CGContextDrawImage(context, drawRect, image.CGImage);CGColorSpaceRelease(colorSpace);// 第二步 取每个点的像素值unsigned char* data = CGBitmapContextGetData (context);if (data == NULL) {dispatch_async(dispatch_get_main_queue(), ^{callBack(nil);});};NSCountedSet* cls = [NSCountedSet setWithCapacity: thumbSize.width * thumbSize.height];for (int x = 0; x < thumbSize.width; x++) {for (int y = 0; y < thumbSize.height; y++) {int offset = 4 * (x * y);int red = data[offset];int green = data[offset + 1];int blue = data[offset + 2];int alpha =  data[offset + 3];// 过滤透明的、基本白色、基本黑色// 这里限制170是因为要去除偏亮的颜色 越接近250越亮if (alpha > 0 && (red < 170 && green < 170 && blue < 170) && (red > 5 && green > 5 && blue > 5)) {NSArray *clr = @[@(red),@(green),@(blue),@(alpha)];[cls addObject:clr];}}}CGContextRelease(context);//第三步 找到出现次数最多的那个颜色NSEnumerator *enumerator = [cls objectEnumerator];NSArray *curColor = nil;NSArray *MaxColor = nil;NSUInteger MaxCount = 0;while ((curColor = [enumerator nextObject]) != nil){NSUInteger tmpCount = [cls countForObject:curColor];if ( tmpCount < MaxCount ) continue;MaxCount = tmpCount;MaxColor = curColor;}UIColor * subjectColor = [UIColor colorWithRed:([MaxColor[0] intValue]/255.0f) green:([MaxColor[1] intValue]/255.0f) blue:([MaxColor[2] intValue]/255.0f) alpha:([MaxColor[3] intValue]/255.0f)];dispatch_async(dispatch_get_main_queue(), ^{callBack(subjectColor);});});
}

如以上代码,要注意这句条件限制
red < 170 && green < 170 && blue < 170 ,这就限制我们提取比较暗的色调,因为越接近250, 颜色是越亮的,当然,我们可以根据自己的实际需求自己动态的调整提取的色调

相关文章:

iOS 提取图片的主题色,并支持灵活提取

遇到一个需求&#xff0c;要提取图片中的色调&#xff0c;但还有一点特殊的需求&#xff0c;就是不是提取颜色最多的色调&#xff0c;也不是平均的色调&#xff0c;是图片中偏暗的色调 这就需要我们动态的调整我们提取的算法&#xff0c; 下面就看代码 dispatch_async(dispatch…...

语雀笔记使用记录

初识语雀 语雀官网 语雀帮助 教你如何使用语雀提高效率 语雀极简使用指南 | 10个常用技巧&#xff0c;带你快速入门 语雀安装 语雀下载地址 根据自己的pc平台下载对应的版本&#xff0c;然后傻瓜式安装即可 初试语雀 语雀为云笔记&#xff0c;并且其特性比较符合我个人的需求…...

安全教育培训小程序系统开发制作方案

安全教育培训小程序系统是为了提高公众的安全意识&#xff0c;普及安全知识&#xff0c;通过微信小程序的方式提供安全教育培训服务&#xff0c;帮助用户了解并掌握必要的安全防范措施。 一、目标用户 企业员工&#xff1a;各岗位员工&#xff0c;特别是IT部门、财务、行政等对…...

【面试题】软件测试实习(含答案)

软件测试实习常见面试题&#xff0c;主要是功能测试相关的基础问题 目录 一、软件测试基础 1、介绍一下你最近的项目&#xff0c;以及工作职责 2、软件项目的测试流程? 3、黑盒测试与白盒测试的区别? 4、黑盒测试常见的设计方法?怎么理解等价类方法和边界值方法 1&…...

后端回写前端日期格式化

问题 不进行格式化处理&#xff0c;就会导致传递的字符串很奇怪 解决方案 注解&#xff08;字段&#xff09; <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</…...

微信小程序开发系列之-在微信小程序中使用云开发

微信小程序开发系列之-在微信小程序中使用云开发 随着微信小程序的快速发展&#xff0c;云开发成为了一个强大的工具&#xff0c;它提供了无需搭建和维护服务器的便捷环境。云开发允许开发者直接使用云数据库、存储和云函数等服务&#xff0c;大大简化了小程序的开发流程。在本…...

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024

《论文阅读》 用于产生移情反应的迭代联想记忆模型 ACL2024 前言简介任务定义模型架构Encoding Dialogue InformationCapturing Associated InformationPredicting Emotion and Generating Response损失函数问题前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦…...

零基础教你如何开发webman应用插件

0X03 应用目录机构 plugin/ └── dingdingtalk │ ├── api │ │ └── Install.php │ ├── app │ │ ├── controller │ │ │ └── IndexController.php │ │ ├── functions.php │ │ ├── middleware │ │ ├── mo…...

AVL树(平衡二叉树)的介绍以及相关构建

欢迎光临 &#xff1a; 羑悻的小杀马特-CSDN博客 目录 一AVL树的介绍&#xff1a; 二AVL树的实现&#xff1a; 1结构框架&#xff1a; 2节点的插入&#xff1a; 旋转&#xff1a; 21左单旋&#xff1a; 2.1.1左单旋介绍及步骤&#xff1a; 2.1.2左单旋代码实…...

SAP员工士气因重组受到打击

SAP在2024年经历了员工士气显著下降的局面&#xff0c;特别是在国内员工中。这一变化与公司在1月宣布的重组计划紧密相关。根据彭博社的报道&#xff0c;6月进行的一项调查显示&#xff0c;SAP约16,500名员工中&#xff0c;有51%愿意接受竞争对手的类似职位&#xff0c;而对公司…...

Unity3D 中构建行为树插件详解

前言 在Unity3D中&#xff0c;行为树&#xff08;Behavior Tree&#xff09;是一种用于游戏AI设计和实现的高级工具&#xff0c;它提供了一种结构化和模块化的方式来管理游戏实体的行为。行为树通过树状结构组织了一系列节点&#xff0c;每个节点代表了一个决策或动作。这种结…...

数学符号练习-函数连续性与导数

前言 其实主要的目的是可以在文本中输出各种数学符号&#xff0c;便于以后用到的时候有现成的例子拿过来抄~~ 函数的连续性 设函数 y f ( x ) yf(x) yf(x)在点 x 0 x_0 x0​的某邻域内有定义,如果当自变量的改变 Δ x Δx Δx趋近于0时&#xff0c;相应函数的改变量也趋近于…...

笔记本维修与拆解(一)

清灰&#xff1a; 拆螺丝: 拔掉电池供电&#xff1a; 多按几次开机键&#xff0c;放电&#xff1a; 涂抹硅胶的时候&#xff0c;千万不要涂很多&#xff0c;溢出CPU&#xff0c;如果硅胶溢到焊盘上去的话很容易热胀冷缩短路 【联想拯救者Y9000P和R9000P最简单清灰教程&#xf…...

【JavaSE系列】IO流

目录 前言 一、IO流概述 二、IO流体系结构 三、File相关的流 1. FileInputStream 2. FileOutputStream 3. FileReader 4. FileWriter 四、缓冲流 五、转换流 1. InputStreamReader 2. OutputStreamWriter 六、数据流 七、对象流 八、打印流 九、标准输入输出流…...

深入探讨在线教育系统源码:搭建知识付费平台实战方案详解

知识付费平台是软件开发行业内炙手可热的项目&#xff0c;其受众群体非常广&#xff0c;也是很多小伙伴提问比较多的&#xff0c;今天小编将从在线教育系统源码开始&#xff0c;为大家讲解一个知识付费平台的搭建开发实战方案。 一、系统架构设计 搭建在线教育系统需考虑以下几…...

前端全屏模式切换

前端全屏模式切换 const isBigScreen ref(false) const handleScreen () > {if (isBigScreen.value) {document.exitFullscreen()isBigScreen.value false} else {isBigScreen.value truedocument.documentElement.requestFullscreen() // 请求全屏模式} }...

构建高可用和高防御力的云服务架构第二部分:SLB负载均衡(2/5)

在现代云服务中&#xff0c;负载均衡&#xff08;Load Balancing&#xff09;是一种关键技术&#xff0c;用于优化资源利用、最小化响应时间、提高系统的可伸缩性和可靠性。负载均衡器位于客户端和服务器之间&#xff0c;根据预设的策略将请求分发到多个服务器上&#xff0c;以…...

计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计

《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展&#xff0c;社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据&#xff0c;这些数据中蕴含着丰富的社会情绪、事件动态等信息&#xff0c;对于政…...

excel-VBA知识点记录

1、计算机硬件的组成部分 内存&#xff0c;一旦断电&#xff0c;存储在里面的数据就消失了&#xff0c;而硬盘是永久存储数据的&#xff0c;所以刚开始我们在文件里面编辑没有按保存的时候&#xff0c;数据是在内存里面的&#xff0c;一旦断电数据就没了&#xff0c;但我们点了…...

RabbitMQ——消息的可靠性处理

1.业务分析 在业务的开发中&#xff0c;我们通常将业务的非核心业务交给MQ来处理&#xff0c;比如支付&#xff0c;在支付过后&#xff0c;我们需要扣减余额&#xff0c;修改支付单状态&#xff0c;修改订单状态&#xff0c;发送短信提醒用户&#xff0c;给用户增加积分等等&am…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...