2016-02-18 1 views
0

Я пытаюсь прочитать значение каждого пикселя как шестнадцатеричное (обозначение HTML) с использованием RMagick или Chunky_PNG, например. #5DBCD2. На данный момент у меня есть ниже, какой вид делает то, что я хочу, но я не мог найти правильный способ действительно прочитать шестнадцатеричное значение. Я бы предпочел использовать Chunky_PNG, хотя, спасибо!Как получить шестнадцатеричное значение из каждого пикселя в RMagick или Chunky_PNG?

require 'chunky_png' 

img = ChunkyPNG::Image.from_file("image.png") 

height = img.dimension.height 
width = img.dimension.width 

height.times do |i| 
    width.times do |j| 
    p [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])] 
    end 
end 

ИЛИ

require 'RMagick' 
include Magick 

image = ImageList.new("image.png") 
(0..image.columns).each do |x| 
    (0..image.rows).each do |y| 
    pixel = image.pixel_color(x, y) 
    p [pixel.red, pixel.green, pixel.blue] 
    end 
end 
+0

Только видел это снова, и понимаю, что теперь я мог бы просто использовать это в моем коренастый PNG, например: 'ставит ChunkyPNG: : Color.to_hex (IMG [J, I]) ' – ant

ответ

1

Немного Hacky решение, но он должен сделать трюк.

require 'chunky_png' 

img = ChunkyPNG::Image.from_file("image.png") 

height = img.dimension.height 
width = img.dimension.width 

height.times do |i| 
    width.times do |j| 
    arr = [ChunkyPNG::Color.r(img[j,i]), ChunkyPNG::Color.g(img[j,i]), ChunkyPNG::Color.b(img[j,i])] 
    p "\##{arr.map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}" 
    end 
end 

Скажем, например, вы хотите значение [204, 102, 0] (который переводит к #cc6600) можно использовать следующий код.

"\##{[204, 102, 0].map {|x| x.to_s(16).rjust(2, '0')}.join.upcase}" 
=> "#CC6600" 

Чтобы разбить его .to_s(16) преобразует целое число в шестнадцатеричном формате и .rjust(2, '0') подставляет «0», если строка не соответствует 2 символов в длину.

Надеюсь, это поможет.

1

Если вы используете RMagick, вы можете использовать метод to_s для каждого цвета пикселей, чтобы найти соответствующее шестнадцатеричное значение. Это не совсем просто, но в этом блоге объясняет, как идти об этом:

http://blog.kellishaver.com/image-color-analysis-with-rmagick/