Photo: New Orleans, LA, October 2000

Programatic Palettes

May 12, 2007 | Software

It all started when I saw Running the Numbers. I really enjoyed the colors of the very last photo, Shipping Containers. I thought, "I wonder if that would make a good color palette?"

I fired up the Digital Color Meter, which ships in the Applications/Utilities directory of all Mac OS X systems, and set the aperture wide to average the color variations within each container color. For the first 30 container images (two rows), I manually copied the RGB color value and pasted it into a text file.

Then I wanted to sort the colors by color value, and make a montage. Four hours later, starting from scratch, I have wrestled my first Ruby/Rmagick/ImageMagick program to the mat. I haven't been able to sort the colors just yet, and it's far past bedtime, but here is a program that reads the text file of color values, makes a color square for each, and generates a montage of the squares.

require 'rubygems'
require 'RMagick'
include Magick

# Create an imagelist to hold the individual color blocks
  colorSquare = Magick::ImageList.new

# Read the text file and get RGB hex color values into an array
   colors = IO.readlines("colors.txt")

# Create scratch images, one per array value
   colors.each { |c| 
     colorSquare.new_image(55, 55) { self.background_color = c }
  }  
  
# Simple sort does not group by colors. Maybe try getting the
# separate chromaticity or rgb values instead? Or changing the 
# colorspace to HSL first?
   colorSquare.sort! 

# Positon scratch images on canvas
   montage = colorSquare.montage {
     self.geometry = "+2+2"
     self.tile = "6x5"
     self.background_color = "white"
  }

# Write file to disk
   montage.write("out.jpg")

Here's what it makes:

out.jpg

Update: "colorSquare.sort!" does a sort, but I can't seem to get the reds, greens, and blues, to group together. I think I'd have to separate out the RGB color values and sort by individual array elements.

Comments

Post a comment

Thanks for signing in, . Now you can comment. (sign out)

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)


Remember me?