MiniMagick は Ruby で ImageMagick や GraphicsMagick の画像処理コマンドを使うためのライブラリである。 RMagick に比べてメモリ消費量が少ない。
gem を使って最新バージョンをインストールする。
% gem install mini_magick
Ubuntu では以下のパッケージが必要なのでインストールしておく。
Ubuntu ではパッケージ ruby-mini-magick があるが、バージョンが古くて機能が足りないかもしれない。
画像ファイル input.png を読み込み、画像ファイル output.png に書き込む。
#!/usr/bin/ruby # coding: utf-8 require "mini_magick" # 画像ファイルの読み込み image = MiniMagick::Image.open("input.png") # 画像ファイルの書き込み image.write("output.png")
画像を新規作成し、画像ファイル output.png に書き込む。
#!/usr/bin/ruby # coding: utf-8 require "mini_magick" # 画像の幅 width = 8 # 画像の高さ height = 16 # 画像用配列を用意して白で初期化する # pix[y][x][c] # y:y座標 0,1,2,...,height-1 # x:x座標 0,1,2,...,width-1 # c:RGB 0,1,2 # 各要素の値は 0 から 255 までの整数 pix = Array.new(height) { Array.new(width) { Array.new(3, 255) } } # ピクセルをいじる # # pix[0][0][0] = 0 # pix[0][0][1] = 255 # pix[0][0][2] = 255 # は # pix[0][0] = [0, 255, 255] # とまとめて書いてもよい pix[0][0] = [0, 255, 255] pix[0][1] = [255, 0, 0] pix[0][2] = [0, 0, 0] pix[1][0] = [0, 0, 255] pix[1][1] = [95, 158, 160] pix[1][2] = [0, 0, 128] pix[2][0] = [255, 192, 203] pix[2][1] = [255, 165, 0] pix[2][2] = [255, 255, 0] # 配列から画像にする image = MiniMagick::Image.get_image_from_pixels(pix, [width, height], "rgb", 8, "png") # 画像ファイルの書き込み image.write("output.png")
画像ファイル input.png を読み込み、y方向に上下反転して画像ファイル output.png に書き込む。
#!/usr/bin/ruby # coding: utf-8 require "mini_magick" # 画像ファイルの読み込み image = MiniMagick::Image.open("input.png") # 画像の幅 width = image.width # 画像の高さ height = image.height # 読み込んだ画像を配列にする pix1 = image.get_pixels # 書き込む画像用の配列を用意する pix2 = Array.new(height) { Array.new(width) } # y座標を反転する (0..(height - 1)).each do |y2| (0..(width - 1)).each do |x2| x1 = x2 y1 = height - y2 - 1 pix2[y2][x2] = pix1[y1][x1] end end # 配列から画像にする image = MiniMagick::Image.get_image_from_pixels(pix2, [width, height], "rgb", 8, "png") # 画像ファイルの書き込み image.write("output.png")
円を描画して画像 output.png に書き込む。
\begin{eqnarray*} x&=&r\cos\phi\\ y&=&r\sin\phi \end{eqnarray*}
\[ ラジアン=角度\times \frac{\pi}{180} \]
この方法は三角関数の説明のためのもので、きれいな円を描画するには他によいアルゴリズムがある。
#!/usr/bin/ruby # coding: utf-8 require "mini_magick" # 画像の幅 width = 300 # 画像の高さ height = 300 # 画像用配列を用意して白で初期化する pix = Array.new(height) { Array.new(width) { Array.new(3, 255) } } # 円の中心 x0 = width / 2 y0 = height / 2 # 円の半径 r = 100 # 円の描画 (0..359).each do |i| # 角度からラジアンに変換 phi = i * Math::PI / 180 # (x,y)座標の計算 x = (r * Math.cos(phi)).round + x0 y = (r * Math.sin(phi)).round + y0 # 座標のピクセルを塗る pix[y][x] = [0, 0, 0] end # 配列から画像にする image = MiniMagick::Image.get_image_from_pixels(pix, [width, height], "rgb", 8, "png") # 画像ファイルの書き込み image.write("output.png")