• 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 -- >%@
     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];
    }

      效果如下:

      

      

  • 相关阅读:
    MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart
    (转)Spring MVC
    ios>android>javaee
    css标准导航代码
    图片对齐问题
    display:inline、block、inline-block的区别
    css怎么引用某张图片?链接要怎么写
    论怎么写好一篇实验报告
    路由器及其配置方法
    (转)MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9407029.html
Copyright © 2020-2023  润新知