2010-10-14 57 views
3

什麼是在Ruby on Rails中生成圖片,Pixel by Pixel的最佳方式。我有一個二維矩陣,每個像素的顏色值都是我想要的。如何在Ruby on Rails中生成位圖圖片

事情是這樣的:

myBitmap = new Bitmap(:width => Column.all.count, :height => Row.all.count) 
Colum.all.each do |col| 
Row.all.each do |row| 
    #Draw the Pixel, with the color information in the matrix 
end 
end 

回答

3

不知道這是一個真正的回報率,但更多的是Ruby的問題。一種方法是使用RMagick,ImageMagick的包裝。據說RMagick會泄漏內存,安裝Rmagick/Imagemagick可能會很痛苦。使用brew(OS X)安裝Imagemagick時,我有最好的體驗。

require 'rubygems' 
require 'rmagick' 
width = 100 
height = 100 
data = Array.new(width) do 
    Array.new(height) do 
    [rand(255), rand(255), rand(255)] 
    end 
end 


img = Magick::Image.new(width, height) 

data.each_with_index do |row, row_index| 
    row.each_with_index do |item, column_index| 
    #puts "setting #{row_index}/#{column_index} to #{item}" 
    img.pixel_color(row_index, column_index, "rgb(#{item.join(', ')})") 
    end 
end 

img.write('demo.bmp') 
+0

我意識到這是一箇舊帖子,但認爲值得一提的是rmagick仍然保留:https://rubygems.org/gems/rmagick – Cimm 2015-06-21 14:16:51

0

你也可以使用GD2,它是ruby綁定。雖然似乎不是很受歡迎。 不知道有關RMagick不再養蜂。謝謝。

require 'rubygems' 
require 'gd2' 

width = 100 
height = 100 
data = Array.new(width) do 
    Array.new(height) do 
    rand(16777216) 
    end 
end 
image = GD2::Image::TrueColor.new(width, height) 
data.each_with_index do |row, row_index| 
    row.each_with_index do |item, column_index| 
    image.set_pixel(row_index, column_index, item) 
    end 
end 

File.open('gd2demo.png', 'wb') do |file| 
    file << image.png 
end