美文网首页
iOS 根据图片获取图片的主色调

iOS 根据图片获取图片的主色调

作者: LT_9999 | 来源:发表于2020-03-17 17:01 被阅读0次

//根据图片获取图片的主色调

+(UIColor*)mostColor:(UIImage*)image{

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
    int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;
#else
    int 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 component
                                                 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)return nil;
    NSCountedSet *cls=[NSCountedSet setWithCapacity:thumbSize.width*thumbSize.height];
    for(int x=0;x
        for(int y=0;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;
    }
    return[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)];
}

相关文章

网友评论

      本文标题:iOS 根据图片获取图片的主色调

      本文链接:https://www.haomeiwen.com/subject/gyatyhtx.html