美文网首页
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