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];
}

  效果如下:

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM