php - 有没有办法使用 php 对十六进制颜色进行分组
问题描述
我正在使用我在 GitHub 中找到的 PHP 颜色提取类用于我正在从事的项目。
颜色提取器类
https://github.com/humanmade/Colors-Of-Image
我的问题是,有没有办法将颜色分组为主要颜色。
示例:如果您在课堂上使用红色,则会给出
#ff0000
#e50000
#cc0000
依此类推,取决于图像。我想做的是在保存到数据库之前将所有这些颜色设为红色。
是否有任何公式可以检查颜色范围?我搜索了几天,但找不到任何信息。珍惜你的时间。
解决方案
这实际上取决于您希望拥有多少组但是因为三对负责红-绿-蓝,您可以将整个字符串(没有哈希)分成对,然后用hexdec
函数将每对计算成十进制,看看它们是否都在你选择的一定范围内。
即:如果十六进制结果比第二对和第三对的总和大得多,那么您很可能会看到一些红色的变体。
示例代码:
$colors = [
'#ff0000',
'#e50000',
'#cc0000',
];
foreach ($colors as $hex){
list($redHex,$greenHex,$blueHex) = str_split(trim($hex,'#'),2);
$redVal = hexdec($redHex);
$greenVal = hexdec($greenHex);
$blueVal = hexdec($blueHex);
if($redVal > $greenVal+$blueVal){
echo $hex.' is most likely red';
}
}
推荐阅读
- haskell - Haskell Identity 镜头
- python - 在 python 中读取 TDMS 文件的元数据
- macos - 如何从一个 Dext 调用函数到另一个 Dext?
- angular - 如何使用自己的模块导入 Angular 组件?
- node.js - 如何在 Couchbase NodeJS SDK 3X 中设置 operationTimeout?
- c - 自定义 NSS 模块 - 成功编译但未调用且未生成任何日志
- spring - 无法从 Postgres 下载原始格式的文件
- sql - 如何在oracle中一次更改所有列?
- apache-nifi - 为 miNifi 开放的端口
- php - Laravel 完整性约束违规:1052 列“id”在 where 子句中不明确