获取七牛图片的十六进制颜色值后通过HSV找到匹配的颜色文字

如果图片放到了七牛云,则通过七牛api可以直接获取图片平均色调(imageAve)

https://developer.qiniu.com/dora/api/1268/image-average-hue-imageave

这里获取的是图片的十六进制RGB
通过函数转换一下以下是PHP代码:

public function rgbToHsv($rgb)
    {
        //rgb十六进制转为十进制
        $split = str_split($rgb, 2);
        $r     = hexdec($split[1]);
        $g     = hexdec($split[2]);
        $b     = hexdec($split[3]);

        //十进制rgb转为hsv
        $hsv_red   = $r / 255;
        $hsv_green = $g / 255;
        $hsv_blue  = $b / 255;

        $hsv_max = max($hsv_red, $hsv_green, $hsv_blue);
        $hsv_min = min($hsv_red, $hsv_green, $hsv_blue);
        //v
        $hsv_v = $hsv_max;

        $hsv_d = $hsv_max - $hsv_min;
        //s
        $hsv_s = $hsv_max == 0 ? 0 : $hsv_d / $hsv_max;

        //h
        if ($hsv_max == $hsv_min) {
            $hsv_h = 0;
        } else {
            switch ($hsv_max) {
                case $hsv_red:
                    $hsv_h = ($hsv_green - $hsv_blue) / $hsv_d + ($hsv_green < $hsv_blue ? 6 : 0);
                    break;
                case $hsv_green:
                    $hsv_h = ($hsv_blue - $hsv_red) / $hsv_d + 2;
                    break;
                case $hsv_blue:
                    $hsv_h = ($hsv_red - $hsv_green) / $hsv_d + 4;
                    break;
            }
            $hsv_h = $hsv_h / 6;
        }

        return ['hsv_h' => $hsv_h, 'hsv_s' => $hsv_s, 'hsv_v' => $hsv_v];
    }

算法和公式直接参考的菜鸟教程右键下载代码:找到对应的转换公式(js代码),如果是其他颜色格式自行转化就行
https://c.runoob.com/front-end/868
https://c.runoob.com/wp-content/themes/toolrunoob/assets/js/color.js
公式比较简单,可以转换成任何语言
首先把hsv规律放入mysql中

CREATE TABLE `colors` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '颜色名称',
  `hsv_h_max` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的H最大值',
  `hsv_h_min` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的H最小值',
  `hsv_s_max` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的S最大值',
  `hsv_s_min` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的S最小值',
  `hsv_v_max` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的V最大值',
  `hsv_v_min` float(5,4) NOT NULL DEFAULT '0.0000' COMMENT 'HSV的V最小值',
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='颜色表';

可能会有人问,为什么使用HSV不直接用RGB,这里请自行百度一下颜色如何分类。
H是主色调,S和V可以自行调整,本示例数据的颜色边界较为模糊,范围更大。

INSERT INTO `wtw_colors` VALUES (1,'黑',0.0000,0.0000,0.0000,0.0000,0.3000,0.0000,'2020-05-14 01:52:30','2020-05-14 02:13:35',NULL),(2,'灰',0.0000,0.0000,0.0000,0.0000,0.9700,0.3001,'2020-05-14 01:52:40','2020-05-14 01:52:40',NULL),(3,'白',0.0000,0.0000,0.0000,0.0000,1.0000,0.9701,'2020-05-14 01:55:22','2020-05-14 01:55:22',NULL),(4,'红',0.0200,0.0000,1.0000,0.0000,1.0000,0.0000,'2020-05-14 01:56:17','2020-05-14 01:56:17',NULL),(5,'橙',0.1200,0.0201,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:32:59','2020-05-14 04:32:59',NULL),(6,'黄',0.1800,0.1201,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','2020-05-14 04:33:07',NULL),(7,'绿',0.5000,0.1800,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','2020-05-14 04:33:07',NULL),(8,'蓝',0.5900,0.5001,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','2020-05-14 04:33:07',NULL),(9,'蓝',0.6667,0.5901,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','2020-05-14 04:33:07',NULL),(10,'紫',0.8405,0.6668,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','2020-05-14 04:33:07',NULL),(11,'红',1.0000,0.8406,1.0000,0.0000,1.0000,0.0000,'2020-05-14 04:33:07','0000-00-00 00:00:00',NULL),(12,'黑',1.0000,0.0000,0.3000,0.0000,0.3000,0.0000,'0000-00-00 00:00:00','0000-00-00 00:00:00',NULL);

找一个颜色值(0.3070,0.4589,0.8118)在这里插入图片描述
通过sql语句搜索

SELECT * FROM colors 
where hsv_h_max >= 0.3070 and hsv_h_min <= 0.3070 and
 hsv_s_max >= 0.4589 and hsv_s_min <= 0.4589 and
 hsv_v_max >= 0.8118 and hsv_v_min <= 0.8118;

在这里插入图片描述
试试别的颜色吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值