iOS 吸取图片主色调
//吸取网络图片的主色调
+ (UIColor *)mostColorFrom:(NSString *)url scale:(NSInteger)scale{NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];UIImage *image = [[UIImage alloc] initWithData:data];return [self mostColor:image size:CGSizeMake(image.size.width/scale, image.size.height/scale)];
}//根据图片获取图片的主色调
+ (UIColor*)mostColor:(UIImage*)image size:(CGSize)thumbSize{
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
#elseint bitmapInfo = kCGImageAlphaPremultipliedLast;
#endif//第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大(可根据自己的需求)
// CGSize thumbSize=CGSizeMake(image.size.width/2, image.size.height/2);CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();CGContextRef context = CGBitmapContextCreate(NULL,thumbSize.width,thumbSize.height,8,//bits per componentthumbSize.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) {return 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];if (alpha>0) {//过滤透明if (red==255&&green==255&&blue==255) {//过滤白色}else{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 *result = [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)];return result;
}
本文是参考的其它教程,只是根据自己的项目需求进行了修改
iOS 吸取图片主色调相关推荐
- iOS UIButton 图片文字上下垂直布局 解决方案
iOS UIButton 图片文字上下垂直布局 解决方案 参考文章: (1)iOS UIButton 图片文字上下垂直布局 解决方案 (2)https://www.cnblogs.com/yajunL ...
- ios 按钮图片充满按钮_iOS有一些非常危险的按钮-UX评论
ios 按钮图片充满按钮 I recently bought a cool thing off Amazon. It's an adapter for iPhone, making it easy t ...
- php 识别图片主色调,PHP 判断图片主色调的简单示例
这篇文章主要为大家详细介绍了PHP 判断图片主色调的简单示例,具有一定的参考价值,可以用来参考一下. 这段代码可以帮助你判断任意图片的主色调,使用了简单的统计算法实现 ,感兴趣的小伙伴,下面一起跟随5 ...
- iOS tabbar 图片,最佳大小方式
iOS tabbar 图片,最佳大小方式 文档大小 30 *30 retaina 60 *60 最佳大小 48 *32 参考:http://stackoverflow.com/questions/15 ...
- IOS gif图片播放 swift
IOS gif图片播放 swift 1. GIF在iOS平台上的几种加载方式 2. 第三方开源框架播放GIF 1. SDWebImage播放: 2. Kingfisher播放: 3. 自己实现加载GI ...
- Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件。
Js获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解.插件. **应用场景:**在很多时候,前端开发过程中需要动态的获取图片的主要的颜色值,并根据主色调去调整主题样式的颜色或者模拟 ...
- veImageX 演进之路:iOS 高性能图片加载 SDK
动手点关注 干货不迷路 1. SDK简介 图片在业务应用场景是一个常见的元素,veImageX(简称ImageX)为业务提供了灵活.高效的一站式图片处理解决方案,包括了服务端 SDK.上传 SDK ...
- 之于图片主色调提取算法
图片颜色量化算法, 又称之为图片主色调提取算法. 也可以称之为调色板提取算法. 比较常见的应用就是用于提取图片的主色调用于上色配色, 当然也可以用于图像分割. 算法的主要目的是从真彩色图像所能表现的大 ...
- iOS相册图片二维码识别
前言:最近客户要求开发一个功能,类似微信长按图片识别图片中的二维码,一开始我使用了ZXingObjC,但是完成后被测试出有些二维码识别不了,所以只能另寻它法,之后更换为苹果系统自带的识别图片二维码的功 ...
最新文章
- ggsurvplot图片输出
- BurpSuite实例教程讲解
- git clone 几种可选参数的使用与区别
- 转tigase 安装
- python continue语句的用法(跳过本次循环,不是跳出整个循环,break才是跳出整个循环)
- HUD2795 线段树(单点更新)
- 美图手机投射功能在哪_在Java 8中进行投射(还有其他功能?)
- 继承(instanceof :比较运算符;不仅运行父类方法,也运行子类独有的方法)
- 在 ASP.NET Web 部件应用程序中使用服务器控件
- Swift去除两边的特定字符(空格或其它)
- 快速清理Exchange 2003中的SMTP队列
- Ubuntu开启root账户ssh远程登录
- SVN—如何安装SVN客户端软件
- 图片轮播插件slideBox.js
- java http 传输二进制流_字符流、字节流、二进制及其在HTTP协议传输
- 使用费马小定理和欧拉定理计算余数
- gitlab-ci配置
- java数组首尾互换,c语言程序,将一个数组首尾互换后输出
- 莫比乌斯反演专题题解
- 【HTTP】协议格式、请求