module Despeck::DominantColorV2
Finds average (?) 'colourful' colour
Public Class Methods
dominant_color(image)
click to toggle source
# File lib/despeck/dominant_color_v2.rb, line 7 def dominant_color(image) image = image.resize(0.05) image_pixels = image.colourspace('srgb').to_a colors = [] mask(image).to_a.each_with_index do |row, i| row.each_with_index do |pixel, j| next unless white_pixel?(pixel) colors << image_pixels[i][j] end end [average(colors, 0), average(colors, 1), average(colors, 2)] end
Private Class Methods
average(pixels, channel)
click to toggle source
# File lib/despeck/dominant_color_v2.rb, line 33 def average(pixels, channel) total = pixels.map { |i| i[channel] }.reduce(:+).to_f (total / pixels.count.to_f).to_i end
mask(image, sens = 5)
click to toggle source
# File lib/despeck/dominant_color_v2.rb, line 24 def mask(image, sens = 5) image = image.colourspace 'lch' (image[1] > sens) end
white_pixel?(pixel)
click to toggle source
# File lib/despeck/dominant_color_v2.rb, line 29 def white_pixel?(pixel) pixel.all? { |c| c >= 245 } end