如何在MySQL中随机选择十六进制颜色,但避免特定的颜色范围?

时间:2019-04-30 14:40:14

标签: mysql random colors

背景

我正在使用MySQL数据库存储在网站上以数据可视化方式检索的数据。在我的可视化中,约有800个项目中有两个是主要关注的项目,在条形图中将为其分配特定的颜色代码(深橙色和浅橙色)。过滤器用于可视化,因此每次可以看到不同的项目集,但应始终突出显示两个主要项目(如果在过滤器之后存在)。

所需解决方案

我想同时实现

  • 彩色条形图
  • 通过避免图表中的相似颜色来轻松直观地识别两个主要项目

我当前的解决方案

一种方法可能是仅创建一组随机的十六进制颜色,手动(或半自动)更改具有与两个主要项目的颜色代码相似的颜色代码的项目的所有颜色,并将其存储为要存储的列表。检索。而现在,这将是我的策略...

但是我真的很想有一种自动化的方法,它可以创建随机的十六进制代码,但要避免特定的颜色范围(在我的情况下,所有颜色都是橙色)。

我已经知道如何随机创建一个十六进制代码:

concat('#',SUBSTRING((lpad(hex(round(rand() * 10000000)),6,0))

现在下一步是避免使用橙色配色方案。

我的问题

关于如何在SELECT语句中实现此目标的任何想法?

SELECT
   item,
   concat('#',SUBSTRING((lpad(hex(round(rand() * 10000000)),6,0)) as color --THIS SHOULD CHANGE
   FROM item_list

1 个答案:

答案 0 :(得分:0)

这更多是一种javascript解决方案,但它会为字符串生成相同的颜色,而不是每次都生成随机颜色。

// this requires tiny color // https://github.com/bgrins/TinyColor
let 
    MD5=function(a){function b(a,b){var c,d,e,f,g;return e=2147483648&a,f=2147483648&b,c=1073741824&a,d=1073741824&b,g=(1073741823&a)+(1073741823&b),c&d?2147483648^g^e^f:c|d?1073741824&g?3221225472^g^e^f:1073741824^g^e^f:g^e^f}function c(a,c,d,e,f,g,h){return a=b(a,b(b(c&d|~c&e,f),h)),b(a<<g|a>>>32-g,c)}function d(a,c,d,e,f,g,h){return a=b(a,b(b(c&e|d&~e,f),h)),b(a<<g|a>>>32-g,c)}function e(a,c,d,e,f,g,h){return a=b(a,b(b(c^d^e,f),h)),b(a<<g|a>>>32-g,c)}function f(a,c,d,e,f,g,h){return a=b(a,b(b(d^(c|~e),f),h)),b(a<<g|a>>>32-g,c)}function g(a){var d,b="",c="";for(d=0;3>=d;d++)c=a>>>8*d&255,c="0"+c.toString(16),b+=c.substr(c.length-2,2);return b}var i,j,k,l,m,n,o,p,h=[];for(a=function(a){a=a.replace(/\r\n/g,"\n");for(var b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);128>d?b+=String.fromCharCode(d):(127<d&&2048>d?b+=String.fromCharCode(d>>6|192):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128)),b+=String.fromCharCode(63&d|128))}return b}(a),h=function(a){var b,c=a.length;b=c+8;for(var d=16*((b-b%64)/64+1),e=Array(d-1),f=0,g=0;g<c;)b=(g-g%4)/4,f=g%4*8,e[b]|=a.charCodeAt(g)<<f,g++;return b=(g-g%4)/4,e[b]|=128<<g%4*8,e[d-2]=c<<3,e[d-1]=c>>>29,e}(a),m=1732584193,n=4023233417,o=2562383102,p=271733878,a=0;a<h.length;a+=16)i=m,j=n,k=o,l=p,m=c(m,n,o,p,h[a+0],7,3614090360),p=c(p,m,n,o,h[a+1],12,3905402710),o=c(o,p,m,n,h[a+2],17,606105819),n=c(n,o,p,m,h[a+3],22,3250441966),m=c(m,n,o,p,h[a+4],7,4118548399),p=c(p,m,n,o,h[a+5],12,1200080426),o=c(o,p,m,n,h[a+6],17,2821735955),n=c(n,o,p,m,h[a+7],22,4249261313),m=c(m,n,o,p,h[a+8],7,1770035416),p=c(p,m,n,o,h[a+9],12,2336552879),o=c(o,p,m,n,h[a+10],17,4294925233),n=c(n,o,p,m,h[a+11],22,2304563134),m=c(m,n,o,p,h[a+12],7,1804603682),p=c(p,m,n,o,h[a+13],12,4254626195),o=c(o,p,m,n,h[a+14],17,2792965006),n=c(n,o,p,m,h[a+15],22,1236535329),m=d(m,n,o,p,h[a+1],5,4129170786),p=d(p,m,n,o,h[a+6],9,3225465664),o=d(o,p,m,n,h[a+11],14,643717713),n=d(n,o,p,m,h[a+0],20,3921069994),m=d(m,n,o,p,h[a+5],5,3593408605),p=d(p,m,n,o,h[a+10],9,38016083),o=d(o,p,m,n,h[a+15],14,3634488961),n=d(n,o,p,m,h[a+4],20,3889429448),m=d(m,n,o,p,h[a+9],5,568446438),p=d(p,m,n,o,h[a+14],9,3275163606),o=d(o,p,m,n,h[a+3],14,4107603335),n=d(n,o,p,m,h[a+8],20,1163531501),m=d(m,n,o,p,h[a+13],5,2850285829),p=d(p,m,n,o,h[a+2],9,4243563512),o=d(o,p,m,n,h[a+7],14,1735328473),n=d(n,o,p,m,h[a+12],20,2368359562),m=e(m,n,o,p,h[a+5],4,4294588738),p=e(p,m,n,o,h[a+8],11,2272392833),o=e(o,p,m,n,h[a+11],16,1839030562),n=e(n,o,p,m,h[a+14],23,4259657740),m=e(m,n,o,p,h[a+1],4,2763975236),p=e(p,m,n,o,h[a+4],11,1272893353),o=e(o,p,m,n,h[a+7],16,4139469664),n=e(n,o,p,m,h[a+10],23,3200236656),m=e(m,n,o,p,h[a+13],4,681279174),p=e(p,m,n,o,h[a+0],11,3936430074),o=e(o,p,m,n,h[a+3],16,3572445317),n=e(n,o,p,m,h[a+6],23,76029189),m=e(m,n,o,p,h[a+9],4,3654602809),p=e(p,m,n,o,h[a+12],11,3873151461),o=e(o,p,m,n,h[a+15],16,530742520),n=e(n,o,p,m,h[a+2],23,3299628645),m=f(m,n,o,p,h[a+0],6,4096336452),p=f(p,m,n,o,h[a+7],10,1126891415),o=f(o,p,m,n,h[a+14],15,2878612391),n=f(n,o,p,m,h[a+5],21,4237533241),m=f(m,n,o,p,h[a+12],6,1700485571),p=f(p,m,n,o,h[a+3],10,2399980690),o=f(o,p,m,n,h[a+10],15,4293915773),n=f(n,o,p,m,h[a+1],21,2240044497),m=f(m,n,o,p,h[a+8],6,1873313359),p=f(p,m,n,o,h[a+15],10,4264355552),o=f(o,p,m,n,h[a+6],15,2734768916),n=f(n,o,p,m,h[a+13],21,1309151649),m=f(m,n,o,p,h[a+4],6,4149444226),p=f(p,m,n,o,h[a+11],10,3174756917),o=f(o,p,m,n,h[a+2],15,718787259),n=f(n,o,p,m,h[a+9],21,3951481745),m=b(m,i),n=b(n,j),o=b(o,k),p=b(p,l);return(g(m)+g(n)+g(o)+g(p)).toLowerCase()},
    c = tinycolor(MD5('your title or something').substr(0,6)),
    hsv = c.toHsv();

if (hsv.h >= 16 && hsv.h <= 52) c.spin(100);
let desired_hex = c.toString();