1. 程式人生 > >iOS程式碼獲取圖片主色調

iOS程式碼獲取圖片主色調

最近的開發過程中,有一個功能是根據銀行的圖示來確定cell的背景顏色,即獲取圖片的主色調。網上搜索了一些方法,發現有位博主分享了一個很好的程式碼方法,不過效果感覺不是特別明顯,或者說變化不是很大,如圖:

後來仔細想了一下,程式碼和方法是沒有錯誤的,但是我們把透明顏色以及白色也計算進去了,所以效果才會那麼不明顯。所以在進行rgb色值獲取的時候,排除掉透明色及白色即可,修改後的程式碼如下:

//根據圖片獲取圖片的主色調
+(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<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 *
[email protected]
[@(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程式碼獲取圖片色調

最近的開發過程中,有一個功能是根據銀行的圖示來確定cell的背景顏色,即獲取圖片的主色調。網上搜索了一些方法,發現有位博主分享了一個很好的程式碼方法,不過效果感覺不是特別明顯,或者說變化不是很大,如圖: 後來仔細想了一下,程式碼和方法是沒有錯誤的,但是我們把透明顏色以及白

android 獲取圖片色調

在build.gradle新增依賴 compile 'com.github.florent37:glidepalette:1.0.6' 使用 TextView tvColor=(TextView) findViewById(R.id.testte); ImageVie

iOS-TZImagePickerController獲取圖片視訊

TZImagePickerControllerDemo 專案介紹 TZImagePickerControllerDemo Podfile新增行 pod 'TZImagePickerController' 使用之前匯入標頭檔案 #import <TZImagePick

Android Lollipop:使用Palette抽取圖片色調

轉載請註明:https://blog.csdn.net/u012854870/article/details/84790724 使用Palette抽取Bitmap主色調 關於Palette 一些Support庫隨著Android Lollipop的釋出而誕生了,其中就有Palette。這

Canvas獲取影象、圖片的平均顏色或色調

轉載自:https://blog.csdn.net/teajs/article/details/50124207 首先,我們可以使用canvas的getImageData函式獲取所有畫素的資料。 然後將所有的rgb三值各取平均值即可。 function getImageColor(can

iOS獲取圖片的區域

之前的專案有這樣的需求,有一個頁面可以檢索一塊區域內圖片的主色。效果圖如圖所示 下面是如何獲取區域主色的實現思路: 首先,我們需要從相簿,或者相機去獲取圖片; 其次,得到圖片需要擷取區域圖片; 然後,獲取擷取圖片的主色。 理想中是這樣的,但是有很多

iOS 獲取圖片某一點的顏色對象(UIColor*)。

[1] bsp uicolor com component tpi div outside 獲取圖片 - (UIColor *)colorAtPixel:(CGPoint)point { // Cancel if p

iOS 實現獲取遠端的圖片並顯示

好久沒寫了,新實現了遠端獲取圖片,磕磕絆絆還是完成了,現在分享一下,希望能幫到大家!我的需求⬆️從一個介面獲取到圖片的名稱並將其分別拼接到路徑上,並取出來。 (1)首先你要定義一個函式,用來獲取URL上的圖片的路徑,並進行一些處理 .h檔案 #import <Foundatio

iOS開發技巧之:獲取ios相簿gif圖片 原資料

<AssetsLibrary/AssetsLibrary.h> 從Safari上儲存了一張動態GIF到本地的相簿中可以確定,儲存到本地相簿的動態GIF沒有問題,只是iPhone的相簿不能顯示動態GIF然後在自己的應用中,要可以選擇GIF圖片上傳到伺服器用UIImagePickerCo

ios通過圖片的URL地址,從網路上獲取圖片(UIImage型別)

-(UIImage *) getImageFromURL:(NSString *)fileURL  { UIImage * result; NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithSt

iOS 非同步載入網路圖片獲取圖片真實尺寸

專案需求: 在網路上載入一組圖片的資料,並且這組圖片要按照比例展示出來 做法分析: (1)首頁介面上要是使用的圖片控制元件的建立,這裡的高度是用設定的高度,這部分需要在主執行緒完成; (2)第二部部分是獲取圖片的實際尺寸,這部分線上程中完成; (3)然後需要在主執行緒重新整

Crawler/ML:爬蟲技術(基於urllib.request庫從網頁獲取圖片)+HierarchicalClustering層次聚類演算法,實現自動從網頁獲取圖片然後根據圖片色調自動分類

網上教程太囉嗦,本人最討厭一大堆沒用的廢話,直接上,就是幹! 網路爬蟲?非監督學習? 只有兩步,只有兩個步驟? Are you kidding me? Are you ok? 來吧,follow me, come on! 一、爬蟲下載圖片 第一步:首先,我們從網

iOS WebView 獲取記憶體圖片 圖片點選

   獲取UIWebView 記憶體中的圖片需要用到一個第三方RNCachingURLProTocol 使用步驟 1 在appdelegate 裡邊註冊。2 在相關獲取到ImageURL 以後呼叫 NSString *fileName = [RNCachingUR

iOS照相機獲取到的圖片自動旋轉90度解決辦法

情景再現:     iOS開發過程中,要實現用用手機攝像頭拍一張照片,經過裁剪壓縮,然後發出去。結果發出去的圖片始終是逆時針旋轉了90度的圖片。 事出有因:     相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalIma

IOS獲取圖片方法,避免記憶體過大閃退

建議使用該方法獲取圖片 NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"sun" ofType:@"png"]; UIImage *image = [[UIImage alloc] initWit

iOS 圖片模糊處理和自動獲取圖片尺寸

1.圖片模糊處理: 方法一: + (UIImage *)coreBlurImage:(UIImage *)image withBlurNumber:(CGFloat)blur { CIContext *context = [CICon

iOS多張圖片上傳多執行緒處理方法(可獲取最後一張上傳狀態後的訊號)

環境重現 1,服務端提供單張上傳的介面。 2,客戶端需求同時提交多張圖片上傳。 3,使用AFNetWorking 或 自封裝的帶有block回撥網路狀態的框架。 思路 1,建立一個管理類。 2,提供一個單例方法。保證管理類唯一 3,提供一個公共

ios app獲取LaunchImages中的圖片

遇到一個需求,讀取LaunchImages中的圖片作為一個VC的背景圖,蒐羅一圈沒找到靠譜的解決方案。 下面的程式碼可以解決,暫時還沒有遇到問題,只是感覺不太好。如果有更好的方案,請留言告知,在此先道

iOS 開發-SDWebImage訪問HTTPS站點獲取圖片資源失敗解決辦法

最簡單的粗暴的方法: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options

ios程式碼調整button圖片image文字title位置

自定義一個button,要調整 button中的image(注意,不是backgroundImage) 和 title 文字的位置,只需要重寫 Button類獨對應的兩個方法即可: 首先,我們來建立一個 SuperButton繼承自 UIButton