iOS 获取图片的主题色

这篇博客介绍了如何在iOS应用中实现从用户选择的照片中提取主题色,并将其作为背景色的功能。作者提供了Swift和Objective-C两种语言的实现代码,通过遍历图片像素并统计RGB色值来找到最常出现的颜色。代码中使用了GCD来避免主线程阻塞,最终将主题色应用于视图背景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者:掘金 lanlinxl

https://juejin.cn/post/7034052595320619021

需求背景
  • 有时候我们会有这样的需求,用户从相册选择一张照片,返回展示的时候,除了展示照片还要让整体背景也是和照片相近颜色,最近自己写了一个图片加水印的项目,想加上此功能,然鹅谷歌搜了一圈发现全是OC代码写的,直接使用好像还存在一些问题,所以本文分别用swift和OC实现相关功能。

代码部分
  • 主要逻辑:

  1. 将图片按比例缩小,因为后续遍历图片每个像素点,循环次数是图片width x height,如果直接原图去遍历,可能一次循环就要跑几十万、百万次,需要时间非常久,所以要将图片缩小。

  2. 获取图片的所有像素的RGB值,每组RGB使用数组存储(可以根据自己的需求过滤部分颜色),然后用Set将数组装起来。

  3. 统计Set里面相同次数最多的色值,即是整个图片的主题色

swift实现代码:

55326d5e46156d1bfd8624ccdb7b97ba.png

因为里面是两个for循环,时间复杂度是On^2,如果设置的width和Height比较大的话,会比较耗时,在主线程里面执行可能会卡住,所以使用了gcd开启子线程去执行,完成后回到主线程执行回调。

外部使用:

selectedImage.subjectColor({[unowned self] color in
        guard let subjectColor = color else { return }
         self.view.backgroundColor = subjectColor
    })

OC实现代码:

151dea4a8dc9dba7e24f59e9ba793d2b.png
使用效果及代码地址
1236f208ba4d299bd7c77be119139a6a.png

demon地址:https://github.com/lanlinxl/UIImageSubjectColor

作者:掘金 lanlinxl

https://juejin.cn/post/7034052595320619021

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

5c7bd34cd077d0e2d17a71957e8fd72e.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里2e352f784bed1d140a9c3ad38773df31.gif好文分享给更多人↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值