Bonjour compatriote Ethlings. Une question à propos de la couleur RVB et de son utilité dans un simple petit code PHP:
Imagine j'ai une variable existe une fonction PHP Connaît les couleurs RVB quelque chose comme P> Fonction PHP RVB (couleur d'entrée, que faire, couleur de sortie) strong> em> em>
Où faire pourrait être +/- 255 valeurs de luminosité, etc. P> est quelque chose comme ça déjà possible ou je suis un jour rêvant? P> $ colora code> contenant une couleur de six caractères valide. Dites
b1b100 code>, une couleur naturelle verdâtre. Maintenant, si je voudrais faire une nouvelle couleur à partir de celui-ci, c'est-à-dire que dix marches plus légères que cette couleur originale, à peu près. P>
rgb-hsl($colorA, +10, $colorB);
4 Réponses :
En général, si vous voulez une nuance plus légère d'une couleur particulière, le processus le plus précis est de convertir de RVB en HSL (ou HSV), de modifier la valeur «L» (ou 'V') qui représente la légèreté, puis reconvertir en RVB. P>
Cela préservera la "teinte", qui représente l'endroit où la couleur est assise sur le spectre, mais changera la "teinte" (si illuminaire) ou "ombre" (si assombrie) de cette couleur. P>
voir http://en.wikipedia.org/wiki/hsl_and_hsv Pour plus d'informations. p>
Vous pouvez incrémenter la valeur, ou vous pouvez incrémenter le rouge, le vert et le bleu de la même quantité. Soit aura le même effet.
@erisco - ils doivent être changés en proportion i>, pas par le même montant absolu.
Oh, j'ai oublié que certaines personnes ne comprennent pas la supériorité des thèmes de couleur en niveaux de gris. Bonne prise.
php a une bibliothèque de manipulation d'images de couple. gd ou imagemagick p>
Edit: J'ai sauté le pistolet, ces bibliothèques ne disposent pas de fonctions de manipulation de couleurs PHP directes - je suppose honnêtement qu'ils ont fait de manière à voir beaucoup de choses qu'ils peuvent faire avec des images via PHP. Ils accomplissent beaucoup de choses cool. Voici 's Exemple d'un gars. P>
Mais aucun d'entre eux n'offre de calculer une couleur plus claire pour une valeur de couleur RVB.
Merci pour votre suggestion +1, je suis allé sur ces liens, et puisque je ne suis pas un expert / génie, je ne pouvais pas trouver mon chemin là-bas ... je suppose que ce sont plus pour la manipulation d'image et trop complexes pour ma petite lumière Colorish Taydreaming ... Toilewayz Je suppose que j'avais des attentes trop colorées / artistiques sur PHP ayant des solutions RVB à la main ...
Cette question à la question a une complète Script PHP soufflé capable de convertir une couleur RVB en une couleur HSL et d'augmenter son composant h d'une couleur HSL - elle doit être triviale pour pouvoir augmenter la place. P>
C'est vieux, mais cet outil est tellement étonnant pour la manipulation des couleurs que je ne pouvais pas m'empêcher de le mentionner: Github .com / mikeemoo / colorjizz-php
sur ce site web: http://www.sitepoint.com/forums/ showthread.php? t = 586223 Ils parlent de ce code qui est initialement fabriqué par OpenSource Drupal. Semble fonctionner correctement dans PHP!?
Maintenant, comment puis-je me moquer de ce code et modifier la légèreté d'une valeur HSL, avant que celle émise par RVB? P>
<?php ### RGB >> HSL function _color_rgb2hsl($rgb) { $r = $rgb[0]; $g = $rgb[1]; $b = $rgb[2]; $min = min($r, min($g, $b)); $max = max($r, max($g, $b)); $delta = $max - $min; $l = ($min + $max) / 2; $s = 0; if ($l > 0 && $l < 1) { $s = $delta / ($l < 0.5 ? (2 * $l) : (2 - 2 * $l)); } $h = 0; if ($delta > 0) { if ($max == $r && $max != $g) $h += ($g - $b) / $delta; if ($max == $g && $max != $b) $h += (2 + ($b - $r) / $delta); if ($max == $b && $max != $r) $h += (4 + ($r - $g) / $delta); $h /= 6; } return array($h, $s, $l); } ### HSL >> RGB function _color_hsl2rgb($hsl) { $h = $hsl[0]; $s = $hsl[1]; $l = $hsl[2]; $m2 = ($l <= 0.5) ? $l * ($s + 1) : $l + $s - $l*$s; $m1 = $l * 2 - $m2; return array(_color_hue2rgb($m1, $m2, $h + 0.33333), _color_hue2rgb($m1, $m2, $h), _color_hue2rgb($m1, $m2, $h - 0.33333)); } ### Helper function for _color_hsl2rgb(). function _color_hue2rgb($m1, $m2, $h) { $h = ($h < 0) ? $h + 1 : (($h > 1) ? $h - 1 : $h); if ($h * 6 < 1) return $m1 + ($m2 - $m1) * $h * 6; if ($h * 2 < 1) return $m2; if ($h * 3 < 2) return $m1 + ($m2 - $m1) * (0.66666 - $h) * 6; return $m1; } ### Convert a hex color into an RGB triplet. function _color_unpack($hex, $normalize = false) { if (strlen($hex) == 4) { $hex = $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3]; } $c = hexdec($hex); for ($i = 16; $i >= 0; $i -= 8) { $out[] = (($c >> $i) & 0xFF) / ($normalize ? 255 : 1); } return $out; } ### Convert an RGB triplet to a hex color. function _color_pack($rgb, $normalize = false) { foreach ($rgb as $k => $v) { $out |= (($v * ($normalize ? 255 : 1)) << (16 - $k * 8)); }return '#'. str_pad(dechex($out), 6, 0, STR_PAD_LEFT); } /* $testrgb = array(0.2,0.75,0.4); //RGB to start with print_r($testrgb); */ print "Hex: "; $testhex = "#b7b700"; print $testhex; $testhex2rgb = _color_unpack($testhex,true); print "<br />RGB: "; var_dump($testhex2rgb); print "<br />HSL color module: "; $testrgb2hsl = _color_rgb2hsl($testhex2rgb); //Converteren naar HSL var_dump($testrgb2hsl); print "<br />RGB: "; $testhsl2rgb = _color_hsl2rgb($testrgb2hsl); // En weer terug naar RGB var_dump($testhsl2rgb); print "<br />Hex: "; $testrgb2hex = _color_pack($testhsl2rgb,true); var_dump($testrgb2hex); ?>
Il suffit d'appeler _color_rgb2hsl code>, prenez le troisième élément du résultat, augmentez-le (l doit être <= 1), puis envoyez ce tableau dans
_color_hsl2rgb code>. Le résultat de que i> est ce que vous voulez. Utilisez le
_Color_unpack code> et
_Color_pack code> fonctionne également si vous utilisez des valeurs #RRGGBBB.
Jour rêver? Il est minuit, homme!
Vous avez raison! Mais ces mois, c'est sombre tout au long de la journée aux Pays-Bas, alors je pensais que nous soyons simplement réalistes à ce sujet :)
@Pekka - Il est évidemment un croyant rêveur! ;-)