二先ず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<