任意の大きさのPNGを円で埋める
rubyでSVGファイルを生成するの続き
本当は六角形を出力したいんですが、ひとまず円で使い方を覚えるなど。
使用例
幅、高さ、ファイル名
F:\dev\ruby>ruby write_svg.rb 800 600 100 maru.png [-30, -100] [56, -150] [142, -100] [228, -150] [314, -100] [400, -150] [486, -100] [572, -150] [658, -100] [744, -150] [830, -100] [916, -150]
中身
require 'cairo' format = Cairo::FORMAT_ARGB32 width = ARGV[0].to_i #横幅 height = ARGV[1].to_i #上下 diameter = ARGV[2].to_i radius = diameter / 2 #半径 #sufaceとcの生成 surface = Cairo::ImageSurface.new(format, width, height) #surface = Cairo::SVGSurface.new("hex.svg", width, height) #SVG開くよりPNGを開く方が早いので…。今は許せSVG c = Cairo::Context.new(surface) c.set_source_rgb(1, 1, 1) c.rectangle(0, 0, width, height) c.fill #使用色指定。黒 c.set_source_rgb(0, 0, 0) #中央まで移動 x = width / 2 y = height / 2 while 0 - radius < y y -= diameter # p [x,y] end y_min = y while 0 - radius < x x -= (diameter*0.86).to_i # p [x, y] end col_count = 0 while x < width + radius while y < width + radius c.circle(x, y, radius) c.close_path c.stroke y += diameter # p [x, y] end y = y_min y -= radius if col_count.odd? #2列に1列ずらす x += (diameter*0.86).to_i p [x, y] col_count += 1 #列番号管理用 end surface.write_to_png(ARGV[3])