Skip to content

Instantly share code, notes, and snippets.

@rtanglao
Created March 22, 2015 17:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rtanglao/0fa6ebf21f7f130b9377 to your computer and use it in GitHub Desktop.
Save rtanglao/0fa6ebf21f7f130b9377 to your computer and use it in GitHub Desktop.
get top 10 colours of an image
#!/usr/bin/env ruby
require 'rubygems'
require 'RMagick'
TOP_N = 10 # Number of swatches
# Create a 1-row image that has a column for every color in the quantized
# image. The columns are sorted decreasing frequency of appearance in the
# quantized image.
def sort_by_decreasing_frequency(img)
hist = img.color_histogram
# sort by decreasing frequency
sorted = hist.keys.sort_by {|p| -hist[p]}
new_img = Magick::Image.new(hist.size, 1)
new_img.store_pixels(0, 0, hist.size, 1, sorted)
end
def get_pix(img)
palette = Magick::ImageList.new
pixels = img.get_pixels(0, 0, img.columns, 1)
pixels.each do |p|
puts p.to_color(Magick::AllCompliance, false, 8, true)
end
end
original = Magick::Image.read("https://secure.gravatar.com/avatar/d0ed69be1d61caf4ddbdc74ce27788ff.png?s=200").first
# reduce number of colors
quantized = original.quantize(TOP_N, Magick::RGBColorspace)
# Create an image that has 1 pixel for each of the TOP_N colors.
normal = sort_by_decreasing_frequency(quantized)
get_pix(normal)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment