iOS 开发之提取图片的主色调用于更换应用主题颜色
从刷爆 IT 圈的一个事件说起:
新闻:某互联网公司产品经理提出一个需求--要求APP开发人员做到软件根据用户的手机壳改变软件的主题颜色。

What Fuck!还有这操作,PM,你过来,保证不打屎你。

结果出现了.mov中出现的“亲热”的肢体接触事件(PS:平安产险的伙食一定很丰盛。额,䅰~)。
笑话看过了,要认真的研读下这个需求了:根据手机壳颜色来设置应用主题色。
很多“牛(kan)逼(ke)”的技术团队给出了多个解决方案:
1、
2、
3、.......
那么除了那么多穿戴设备及高端的天文组加入外,我们纯APP开发人员怎么实现这个需求?可以考虑换个思路来实现这个需求:通过手机摄像头拍照或相册选择手机壳照片,然后提取照片的主色调或者照片虚化设置背景图片(如酷我音乐那种)。当然如果PM认为这种方法太笨,想要智能的那种,我建议公司多给PM申请一份保险【捂脸笑】.gif。
假定PM原定想的是获取手机出厂时颜色(黑,银,土豪金)。
代码如下:
#warning 该方法是私有 API,上线会被拒
UIDevice *device = [UIDevice currentDevice];
SEL selector = NSSelectorFromString(@"deviceInfoForKey:");
if (![device respondsToSelector:selector]) {
selector = NSSelectorFromString(@"_deviceInfoForKey:");
}
if ([device respondsToSelector:selector]) {
IMP imp = [device methodForSelector:selector];
NSString *(*func)(id, SEL, NSString *) = (void*)imp;
NSString *deviceColor = func(device, selector, @"DeviceColor");
NSString *deviceEnclosureColor = func(device, selector, @"DeviceEnclosureColor");
NSLog(@"deviceColor -- >%@\n deviceEnclosureColor===>%@ ", deviceColor, deviceEnclosureColor); }
可获得手机外壳颜色。
如果产品指获取手机购买的外壳颜色,可以使用拍照,获取图片的平均颜色值。
找到一个不错的开源项目:SOZOChromoplast,可直接使用。
使用时:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
_imageView.image = image;
_chromoplast = [[SOZOChromoplast alloc] initWithImage:image];
self.view.backgroundColor = _chromoplast.dominantColor;
[picker dismissViewControllerAnimated:YES completion:nil];
}
效果如下:

iOS 开发之提取图片的主色调用于更换应用主题颜色的更多相关文章
- iOS开发之--最简单的导航按钮更换方法/导航颜色的改变
有很多时候,我们需要用到导航,那么更换导航的时候,是在那用那修改,还是自定义一个导航,或者是声明一个代理方法,经过查资料和对导航属性的一些了解,用一种方法最为简单,就是在入口类里面添加一个方法,调用偏 ...
- iOS开发需要哪些图片?
1.产品设计图 可以以6的长宽比 750*1134来设计.这些图片用于描述app是什么样子的,这是app开发人员的开发参考. 2.产品切图 将设计师将设计稿切成可以用来开发的图 颜色值 iOS颜色值取 ...
- iOS开发-仿微信图片分享界面实现
分享功能目前几乎已成为很多app的标配了,其中微信,微博等app的图片分享界面设计的很棒,不仅能够展示缩略图,还可以预览删除.最近我在做一款社交分享app,其中就要实现图文分享功能,于是试着自行实现仿 ...
- iOS开发之多图片无缝滚动组件封装与使用
经常有园友会问"博主,有没有图片无限滚动的Demo呀?", 正儿八经的图片滚动的Demo我这儿还真没有,今天呢就封装一个可以在项目中直接使用的图片轮播.没看过其他iOS图片无限轮播 ...
- iOS开发——高级篇——图片轮播及其无限循环效果
平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...
- IOS开发中@2x图片等适应不同分辨率手机
开发中,例如: nanshanImage.image=[UIImage imageNamed:@'index_pic.png']; 在项目中还保存中index_pic@2x.png的图片,此图为了只适 ...
- iOS开发-UISlider改变图片透明度
拖动条是通过滑块的位置来标识数值,而且拖动条允许用户拖动滑块来改变值.因此,拖动条通常用于对系统的某种数值进行调节,如调节亮度,透明度,音量等. 一.属性介绍 @property(nonatomic) ...
- iOS开发-简单的图片查看器
现在你只要拿着手机,不管你Android还是iOS,新闻类的App不可避免都有一个功能就是图片查看,做个专题,查看一下内容,App Store中也有专门针对图片浏览的App,鉴于目前所知有限,无法做到 ...
- ios开发清除SDWebImage图片缓存
一:一般在实际的项目应用中都会用到第三方框架SDWebImage去下载缓存图片,但在ios开发应用中,常常涉及对SDWebImage缓存图片的清除.本文所列出代码即是对SDWebImage缓存图片的清 ...
随机推荐
- Dimensionality and high dimensional data: definition, examples, curse of..
Dimensionality in statistics refers to how many attributes a dataset has. For example, healthcare da ...
- laravel框架实现发送邮件的功能
1.在config 下的mail.php中配置(配置后面的两个就行了) 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', '7623018 ...
- JS高级---继承
继承 面向对象编程思想: 根据需求, 分析对象, 找到对象有什么特征和行为, 通过代码的方式来实现需求, 要想实现这个需求,就要创建对象 ,要想创建对象, 就应该显示有构造函数, 然后通过构造函数来创 ...
- SpringBoot与动态多数据源切换
本文简单的介绍一下基于SpringBoot框架动态多数据源切换的实现,采用主从配置的方式,配置master.slave两个数据库. 一.配置主从数据库 spring: datasource: ty ...
- 二分题 D - Salary Changing codeforce
题意:给出n个人(n是奇数),s钱:s为总的可以付工钱的钱: 每一个工人有一个付工钱的区间,只要在这个区间范围内,随便一个数都可以当作给这个工人付了钱: 老板要付给每个工人钱,并且付钱的中位数要尽可能 ...
- 题解【洛谷P2323】 [HNOI2006]公路修建问题
题面 题解 跑两遍\(Kruskal\),第一次找出\(k\)条一级公路,第二次找出\(n - k - 1\)条二级公路,直接计算\(MST\)的权值之和即可. 代码 #include <ios ...
- nginx 定义:响应头和请求头
1) 响应头 add_header 例如: add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; a ...
- 【常识】常用RGB颜色对照表
RGB颜色表 白色:rgb(255,255,255) 黑色:rgb(0,0,0) 红色:rgb(255,0,0) 绿色:rgb(0,255,0) 蓝色:rgb(0,0,255) 青色:rgb(0,25 ...
- 手机chrome书签文件导出教程
重大发现!!!本人亲自测试可以导出chrome书签文件登录下面的链接https://takeout.google.com/settings/takeout/custom/chrome?pli=1
- 搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务
搭建私人通讯录/日历同步服务_使用cardDAV/calDAV服务 转载注明来源: 本文链接 来自osnosn的博客,写于 2020-02-18. Radicale, Radicale (对cardd ...