12
votes

Convertir en code de couleur hexagonale à 3 chiffres

J'utilise des valeurs de couleur hexagonales à 3 chiffres dans CSS pendant une longue période: #fff , # 999 , # 069 , etc. Je peux voir comment les lettres / chiffres répétitifs sont fusionnés pour créer un code de couleur hexagonale à 3 chiffres, mais je ne comprends pas complètement le motif de pouvoir écrire un convertisseur dans PHP. Y a-t-il une documentation pour cela?

EDIT: Oh, ma question n'était peut-être pas claire. J'ai besoin de savoir comment certaines des valeurs de couleur hexagonales à 6 chiffres sont converties en 3 chiffres. xxxxxx ( ffffff ) et xxyyzz ( 006699 ) - ce sont les deux seuls schémas, correct?


3 commentaires

De quelle manière cherchez-vous la conversion? De 3 à 6 chiffres? Ou d'hex à décimal?


Les avantages d'un convertisseur seraient sûrement très limités. Après tout, seule une faible proportion de codes de couleur peut être simplifiée et pour une économie de seulement 3 caractères par code. Je serais surpris s'il y a une documentation, mais comme exercice de programmation, c'est probablement utile.


Oh, ma question n'était peut-être pas claire. J'ai besoin de savoir comment certaines des valeurs de couleur hexagonales à 6 chiffres sont converties en 3 chiffres? XXXXXX (FFFFFF) XXYYZZ (006699), ce sont les deux seuls motifs, correct?


4 Réponses :


3
votes

Le code CSS 3 chiffres est court pour 6 chiffres ": # 06A; est # 0066AA;
Chaque deux chiffres représentent un nombre de 0 à 255.
Conversion de ces valeurs à HEX et à l'arrière est tout ce dont vous avez besoin.


0 commentaires

35
votes

Pour convertir un code hexagique de 3 caractères en une 6 caractère, vous devez répéter chaque caractère: xxx

si vous souhaitez le convertir en décimal, vous pouvez utiliser hexdec fonction


0 commentaires

2
votes

# f0f est étendu à # FF00FF , il vous suffit de calculer la valeur et la valeur de la valeur 16 pour chaque caractère, par exemple:

# F98 : f = 15 => rouge = 15 + 15 * 16 = 255 etc.


3 commentaires

Ah, je semble avoir manqué le point - et mon sens de consulter l'API ( heexdec () ).


Ainsi, en utilisant cette logique, vous pouvez simplement l'inverser en divisant par 16 afin d'obtenir la version hexagonale 3?


@JOSH Eh bien, oui. Mais vous vous limiterez efficacement à une granularité de 16 par canal au lieu de 256.



2
votes

function hexfix(str) {
  var v, w;
  v = parseInt(str, 16);	// in rrggbb
  if (str.length == 3) {
    // nybble colors - fix to hex colors
	//  0x00000rgb              -> 0x000r0g0b
	//  0x000r0g0b | 0x00r0g0b0 -> 0x00rrggbb
	w = ((v & 0xF00) << 8) | ((v & 0x0F0) << 4) | (v & 0x00F);
	v = w | (w << 4);
  }
  return v.toString(16).toUpperCase();
 }

var hex1 = 'AABBCC',
    hex2 = 'ABC';

document.body.appendChild(document.createTextNode(hex1+" becomes "+hexfix(hex1)+'.  '));
document.body.appendChild(document.createTextNode(hex2+" becomes "+hexfix(hex2)+'.  '));


0 commentaires