Los siguientes valores hexadecimales probablemente serían considerados "rojos" por el ojo del profano:
¿Hay alguna manera, usando solo el código hexadecimal, de determinar a qué color básico se parece más un color dado? Me gustaría poder hacer esto también para rojo, azul, verde, amarillo, verde, morado, marrón, rosa, negro y blanco.
Tendrá que definir qué significa 'más cercano' y cuáles son sus colores de destino. Se puede pensar en el color como un cubo, un cilindro y muchas otras formas, y su objetivo es esencialmente encontrar el color más cercano dentro de esa forma tridimensional.
Si se restringe solo a los colores primarios, la forma más sencilla sería convertir sus colores al espacio de color HSV .
Agregar rosa lo hace un poco más complicado, porque en HSV Pink y red tendrían el mismo tono. Ahora tendría que tener en cuenta la luminancia/valor. Podría hacer un proceso de dos etapas en el que solo compare la luminancia entre dos colores objetivo del mismo tono.
Se realizaría una prueba similar para el blanco y el negro. En HSV, los blancos y los negros pueden tener tonalidades que varían extrañamente, por lo que querrás ignorar la tonalidad cuando pruebes eso.
Dicho todo esto, es posible que pueda sacar la raíz cuadrada de las sumas de las diferencias en los canales RGB entre su muestra y un objetivo, usar eso como una medida de distancia, comparar todos sus objetivos y seleccionar el que tenga la distancia mínima. . Calcular las distancias en diferentes espacios de color puede producir diferentes características de resultados.
Si entiendo la pregunta, diría "Por supuesto". Simplemente necesita familiarizarse más con el maleficio. Pero esto solo funciona hasta ahora.
Sabes que FF 00 00 es 100% rojo y cero verde y azul. A medida que disminuye la intensidad del FF, la sombra se oscurece.
El color se entiende mejor que los números de la misma manera que un gráfico funciona mejor que una columna de números. Entendemos intelectualmente lo que significa un número hexadecimal o una tabla de números, pero nuestras mentes captan los colores y los gráficos en otro nivel.
La verdadera pregunta sería cuán necesario sería conocer el código hexadecimal más allá de R - G - B y más oscuro y más claro. Es más rápido y más fácil usar un selector de color.
No creo que esto sea posible. Debería definir qué significa "rojo, azul, verde, morado, marrón, rosa". Porque significan cosas diferentes para cada persona a la que le preguntarías.
Las únicas constantes allí son el blanco y el negro. El negro es siempre negro. El blanco es siempre blanco. No hay lugar para una interpretación diferente de lo que es "negro".
Todos los demás colores tienen matices y las sombras nunca son una constante. Por lo tanto, no puede definir una constante universal cuando no la hay.
Puede elegir las constantes que desee para esos colores. Pero esos pueden ser completamente inexactos para cualquier otra persona . Puede que veas "rojo" como siempre #ff0000... Personalmente creo que #aa0000 es un rojo mejor...
Simplemente no puede determinar definiciones universales de términos inherentemente ambiguos.
Dado que está preguntando cómo se percibiría el color (en lugar de su valor matemático), la respuesta es que esto sería demasiado problemático, ya que las personas (incluso aquellas con una visión del color "normal") perciben los colores de manera diferente.
Prueba esta prueba . Esta prueba y otras similares muestran que lo que las personas perciben como naranja y amarillo no tiene una "línea clara": la línea entre el amarillo y el naranja es diferente, no como una cuestión de gusto, sino fisiológicamente, para diferentes personas.
Encontré una respuesta relacionada aquí . Usando los colores de la quinta fila de esta tabla de colores , y los nombres de este sitio web "Nombra ese color" , y el algoritmo de la respuesta anterior, escribí el siguiente script, hexcode-rounding.php:
<?php
function distance_3d($rgb_1, $rgb_2) {
return sqrt(pow($rgb_1[0] - $rgb_2[0], 2) +
pow($rgb_1[1] - $rgb_2[1], 2) +
pow($rgb_1[2] - $rgb_2[2], 2));
}
if (isset($_POST["hexcode"])) {
$hexcode = $_POST["hexcode"];
$r = hexdec(substr($hexcode, 0, 2));
$g = hexdec(substr($hexcode, 2, 2));
$b = hexdec(substr($hexcode, 4, 2));
$rgb = [$r, $g, $b];
$basic_colors = [
'black' => [0, 0, 0],
'white' => [255, 255, 255],
'red' => [255, 0, 0],
'orange' => [255, 128, 0],
'yellow' => [255, 255, 0],
'chartreuse' => [128, 255, 0],
'green' => [0, 255, 0],
'spring green' => [0, 255, 128],
'cyan' => [0, 255, 255],
'azure' => [0, 128, 255],
'blue' => [0, 0, 255],
];
foreach ($basic_colors as $color_name => $color_rgb) {
echo "<p>$color_name: " . distance_3d($rgb, $color_rgb) . "</p>";
}
} else {
?>
<form action="hexcode-rounding.php" method="post">
<p>Hex code: <input type="text" name="hexcode" /><br />
<p><input type="submit" value="Round!"></p>
</form>
<?php
}
Imprime una lista que muestra qué tan cerca está el color dado de cada color "básico" en el espacio RGB tridimensional. El valor más bajo de la lista es aquel al que el color se acerca más. En particular, faltan el púrpura, el marrón y el rosa, pero no sería difícil agregarlos.
joojaa
Asistente azul