quadule / colorscore

Finds the dominant colors in an image and scores them against a user-defined palette, using the CIE2000 Delta E formula.
87 stars 26 forks source link

Problem with Histogram #2

Closed diegorv closed 11 years ago

diegorv commented 11 years ago

Hello,

I have this image: http://decorame-images.s3-website-us-east-1.amazonaws.com/photo/228082/decoraca-quarto-casal.png

When i use this image in the code

Colorscore::Histogram.new(photo_url, 16).scores[0..7].each do |c|
   puts c
end

I get this error:

ArgumentError: ArgumentError
from /app/vendor/bundle/ruby/1.9.1/gems/color-1.4.1/lib/color/rgb.rb:54:in `from_html'
from (irb):22
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'

Try debug with this code from histogram.rb class

image_path = "http://decorame-images.s3-website-us-east-1.amazonaws.com/photo/228082/decoraca-quarto-casal.png"
colors = 16
depth = 8
output = `convert #{image_path} -resize 400x400 -format %c -dither None -quantize YIQ -colors # {colors} -depth #{depth} histogram:info:-`
@lines = output.lines.sort.reverse.map(&:strip).reject(&:empty?)
hex_values = @lines.map { |line| line[/#[0-9A-F]+/] }

I got this output

=> ["#C0B09B", "#CEC6BA", "#D9CDBC", "#EAD2CB", "#F2EEE4", "#D6DBD8", "#BF312B", "#D19A94", "#625A49", "#A69173", "#EF755C", "#573D24", "#ED973A", "#723330", "#9CAE9CFE", "#9A9F9CFA"]

"#9CAE9CFE", "#9A9F9CFA" doesnt work in

def colors
   hex_values = @lines.map { |line| line[/#[0-9A-F]+/] }
   hex_values.map { |hex| Color::RGB.from_html(*hex) } # < PROBLEM HERE 
end

What i can do?

quadule commented 11 years ago

Thanks for the thorough report! I just pushed a new version that should fix this issue.

Since those extra two hex digits in the color are the alpha channel, Colorscore now ignores colors with any transparency. I'm thinking this could be changed to a transparency cutoff, or it could just reduce the score of the color — let me know if you have any thoughts on that.