2011-02-09 1 views
2

Возможно ли получить изображение histogram с мини-маджоком или image_science?Гистограмма изображения с mini_magick или image_science?

Я боюсь, что использование mini_magicks mogrify не позволяет получать такую ​​информацию. image_science вряд ли документируется и, по-видимому, ограничивается только масштабированием эскизов и обрезкой.

Один маршрут, который нужно взять, состоял бы в повторении каждого пикселя и извлечении его значений в Ruby. Но для этого требуется информация о пикселях, к которой я тоже не могу попасть в mini_magick.

Я могу вернуться к RMagick или im_magick, но они либо менее популярны/неизвестны, либо, как сообщается, плохи в производительности.

Для справки: это часть более раннего вопроса об обнаружении entropy of parts of images.

ответ

6

Обходным путем является использование mini_magick для преобразования файла в формат PNG, сохранение результата во временном файле, а затем использовать «почти чистый Ruby» png library или фактически чистый Ruby chunky_png, чтобы просмотреть результат. Обе библиотеки упрощают итерацию пикселя изображения по пикселям.

Я подозреваю, что вы указали mini_magick/image_science, потому что их намного проще установить, чем, скажем, rmagick. Причина, по которой это обходное решение может сработать для вас, заключается в том, что png и chunky_png являются безболезненными установками из-за отсутствия зависимостей.

Единственное, что вы бы отказались - это небольшое выступление, но если это настоящая проблема, oily_png может расширить chunky_png с помощью дополнительной C-магии .. так что будет компиляция, но это не должно быть болезненный.

ОК, я пришел с каким-то кодом для этого, который работает:

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 может create histograms из командной строки. Это может не помочь, если вы хотите что-то конкретное, но я думал, что выброшу его там.

+0

Может быть, вы можете помочь мне с этим вопрос: http://stackoverflow.com/questions/20401968/corp-image-with-ruby –

0

Мини-магия - очень тонкий слой над бинарником imagemagick. Если он не поддерживает один из вариантов Imagemagick, его легко добавить.

4

Вы можете получить изображение в формате гистограммы из ImageMagick с помощью этой команды:

convert penguinsonice.bmp -format %c histogram:info: 

и код для драгоценного камня «mini_magick», которые обертывают ImageMagick для Ruby:

require "mini_magick" 

module MiniMagick 
class Image 
    def get_dominant_color 
    color = run_command("convert", path, "-format", "%c\n", "-colors", 1, "-depth", 8, "histogram:info:").split(' '); 
    # color = " 1764000: (208,195,161) #D0C3A1 srgb(208,195,161)\n\n" 
    { 
    hex: color[2], 
    rgb: color[1][1..-2].split(',') 
    } 
    end 
end 
end 


i = MiniMagick::Image.open("/home/a.jpg") 

p i.get_dominant_color()[:hex] 
p i.get_dominant_color()[:rgb] 
Смежные вопросы