Обходной путь - использовать mini_magick для преобразования файла в формат PNG, сохранить результат во временном файле, а затем использовать «почти чистую Ruby» png библиотеку или фактически чистый Ruby chunky_png чтобы просмотреть результат. Обе библиотеки позволяют легко перебирать изображение пиксель за пикселем.
Я подозреваю, что вы указали mini_magick / image_science, потому что их намного проще установить, чем, скажем, rmagick. Поэтому этот обходной путь может помочь вам в том, что png и chunky_png устанавливаются безболезненно из-за отсутствия зависимостей.
Единственное, от чего вы бы отказались - это небольшая производительность, но если это реальная проблема, oily_png может расширить chunky_png с помощью некоторой дополнительной магии Си ... так что будет компиляция, но не должно быть болезненным.
ОК, я придумал код для этого, который работает:
require 'mini_magick'
require 'chunky_png'
i = MiniMagick::Image.open("a.jpg")
i.format('png')
p = ChunkyPNG::Image.from_io(StringIO.new(i.to_blob))
p.height.times do |y|
p.width.times do |x|
p[x, y] # => here's your pixel..
end
end
Оттуда вы можете взять часть создания гистограммы; -)
Кроме того, я только что заметил, что сам ImageMagick может создавать гистограммы из командной строки. Это может не помочь, если вы хотите что-то конкретное, но я подумал, что выкину это туда.