Instantly share code, notes, and snippets.

# jfriedlaender/gist:1273614 Created Oct 9, 2011

What would you like to do?
Lighten or darken a hexadecimal color (string)
 # Amount should be a decimal between 0 and 1. Lower means darker def darken_color(hex_color, amount=0.4) hex_color = hex_color.gsub('#','') rgb = hex_color.scan(/../).map {|color| color.hex} rgb[0] = (rgb[0].to_i * amount).round rgb[1] = (rgb[1].to_i * amount).round rgb[2] = (rgb[2].to_i * amount).round "#%02x%02x%02x" % rgb end # Amount should be a decimal between 0 and 1. Higher means lighter def lighten_color(hex_color, amount=0.6) hex_color = hex_color.gsub('#','') rgb = hex_color.scan(/../).map {|color| color.hex} rgb[0] = [(rgb[0].to_i + 255 * amount).round, 255].min rgb[1] = [(rgb[1].to_i + 255 * amount).round, 255].min rgb[2] = [(rgb[2].to_i + 255 * amount).round, 255].min "#%02x%02x%02x" % rgb end

### plexus commented Jul 12, 2013

 Pretty cool, but I prefer a more functional style, since you're doing the same operations on each value of a list ``` def darken_color(hex_color, amount=0.4) hex_color = hex_color.gsub('#','') rgb = hex_color.scan(/../).map(&:hex).map{|color| color * amount}.map(&:round) "#%02x%02x%02x" % rgb end```
to join this conversation on GitHub. Already have an account? Sign in to comment