二先ずInkscapeファイルフォーマット弄ってみた
svg自体がxmlで記述されてるっぽいので、弄るのは楽ですね。
やっぱりtextフォーマットですよね>w<b
で、xmlを解析するのもメンドくさいので、
簡単に正規表現を用いて置換してみた。
正規表現で置換しやすいように、RGBで塗り分けられた以下ロゴを、
rubyでホゲホゲしてやりまして、
Red = /#ff0000/ Green = /#00ff00/ Blue = /#0000ff/ Black = "#ffffff" def redrand line replace = case rand(12) when 0; "#ffd5d5" when 1; "#ffaaaa" when 2; "#ff8080" when 3; "#ff5555" when 4; "#f4d7d7" when 5; "#e9afaf" when 6; "#de8787" when 7; "#d35f5f" when 8; "#ffe6d5" when 9; "#ffccaa" when 10; "#ffb380" when 11; "#ff9955" else; Black end line.gsub Red,replace end def bluerand line replace = case rand(8) when 0; "#0000d4" when 1; "#0000aa" when 2; "#000080" when 3; "#000055" when 4; "#5500d4" when 5; "#4400aa" when 6; "#330080" when 7; "#220055" else; Black end line.gsub Blue,replace end def greenrand line replace = case rand(8) when 0; "#dee3db" when 1; "#bec8b7" when 2; "#d5ffd5" when 3; "#aaffaa" when 4; "#d7f4d7" when 5; "#afe9af" when 6; "#dbe3db" when 7; "#b7c8b7" else; Black end line.gsub Green,replace end open('dest.svg',"w"){|file| open('src.svg').readlines.each{|line| file << case line when Red redrand line when Green greenrand line when Blue bluerand line else line end } }
こんな感じになりました。
ん〜、SVG楽しいかも>A<