2011-02-09 72 views
2

mini_magickまたはimage_scienceを使用して画像のhistogramを取得できますか?mini_magickまたはimage_scienceの画像ヒストグラム?

私は恐れ入りますが、については、の情報検索は許可されていません。 image_scienceはほとんど文書化されておらず、サムネイルのスケーリングとクロップのみに制限されているようです。

1つのルートを取るには、各ピクセルを繰り返し、その値を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マジックで拡張することができます。コンパイルされますが、痛いもの。私は働き、このためのいくつかのコードを作ってみた

OK、:

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を入力できます。特定のものがほしいと思ったら、これは役に立たないかもしれませんが、私はそこに投げ捨てると思っていました。あなたは、このコマンドではImageMagickからヒストグラム形式の画像を得ることができます

+0

はたぶん、あなたはこれで私を助けることができます質問:http://stackoverflow.com/questions/20401968/corp-image-with-ruby –

0

ミニマジックは、イメージマジックバイナリに比べて非常に薄いレイヤーです。 Imagemagickのオプションのいずれかをサポートしていない場合は、追加するのは簡単です。

4

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

とコード宝石「mini_magick」Ruby用そのラップのImageMagickのために:

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] 
関連する問題