2011-02-09 2 views
2

mini_magick 또는 image_science를 사용하여 histogram 이미지를 가져올 수 있습니까?이미지 히스토그램에 mini_magick 또는 image_science가 있습니까?

의 모범적 인 미니 미니 태그 사용은 이러한 정보 검색을 허용하지 않습니다. image_science는 거의 문서화되지 않고 엄지 손톱 크기 조정 및 자르기에만 국한된 것으로 보입니다.

루비에서 각 픽셀을 반복하여 그 값을 추출하는 것이 하나의 경로입니다. 하지만 그 정보는 픽셀에 관한 정보를 필요로하는데, 나는 mini_magick에서 그 정보를 얻을 수 없습니다.

RMagick 또는 im_magick으로 폴백 할 수 있지만 성능이 좋지 않거나 알려지지 않은 것으로 나타납니다.

기록 :이 내용은 entropy of parts of images을 찾는 이전 질문의 일부입니다.

답변

6

해결 방법은 mini_magick을 사용하여 파일을 PNG 형식으로 변환하고 결과를 임시 파일에 저장 한 다음 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

은 아마 당신이 나를 도울 수 question : http://stackoverflow.com/questions/20401968/corp-image-with-ruby –

0

미니 magick은 이미지 매직 바이너리에 비해 매우 얇은 레이어입니다. Imagemagick의 옵션 중 하나를 지원하지 않는다면 쉽게 추가 할 수 있습니다.

4

:

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

코드 보석 'mini_magick'루비에 대한 그 랩 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] 
관련 문제