monster_id 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/README.mkd +15 -0
  4. data/Rakefile +1 -0
  5. data/lib/monster_id.rb +12 -0
  6. data/lib/monster_id/monster.rb +66 -0
  7. data/lib/monster_id/parts/arms_1.png +0 -0
  8. data/lib/monster_id/parts/arms_2.png +0 -0
  9. data/lib/monster_id/parts/arms_3.png +0 -0
  10. data/lib/monster_id/parts/arms_4.png +0 -0
  11. data/lib/monster_id/parts/arms_5.png +0 -0
  12. data/lib/monster_id/parts/body_1.png +0 -0
  13. data/lib/monster_id/parts/body_10.png +0 -0
  14. data/lib/monster_id/parts/body_11.png +0 -0
  15. data/lib/monster_id/parts/body_12.png +0 -0
  16. data/lib/monster_id/parts/body_13.png +0 -0
  17. data/lib/monster_id/parts/body_14.png +0 -0
  18. data/lib/monster_id/parts/body_15.png +0 -0
  19. data/lib/monster_id/parts/body_2.png +0 -0
  20. data/lib/monster_id/parts/body_3.png +0 -0
  21. data/lib/monster_id/parts/body_4.png +0 -0
  22. data/lib/monster_id/parts/body_5.png +0 -0
  23. data/lib/monster_id/parts/body_6.png +0 -0
  24. data/lib/monster_id/parts/body_7.png +0 -0
  25. data/lib/monster_id/parts/body_8.png +0 -0
  26. data/lib/monster_id/parts/body_9.png +0 -0
  27. data/lib/monster_id/parts/eyes_1.png +0 -0
  28. data/lib/monster_id/parts/eyes_10.png +0 -0
  29. data/lib/monster_id/parts/eyes_11.png +0 -0
  30. data/lib/monster_id/parts/eyes_12.png +0 -0
  31. data/lib/monster_id/parts/eyes_13.png +0 -0
  32. data/lib/monster_id/parts/eyes_14.png +0 -0
  33. data/lib/monster_id/parts/eyes_15.png +0 -0
  34. data/lib/monster_id/parts/eyes_2.png +0 -0
  35. data/lib/monster_id/parts/eyes_3.png +0 -0
  36. data/lib/monster_id/parts/eyes_4.png +0 -0
  37. data/lib/monster_id/parts/eyes_5.png +0 -0
  38. data/lib/monster_id/parts/eyes_6.png +0 -0
  39. data/lib/monster_id/parts/eyes_7.png +0 -0
  40. data/lib/monster_id/parts/eyes_8.png +0 -0
  41. data/lib/monster_id/parts/eyes_9.png +0 -0
  42. data/lib/monster_id/parts/hair_1.png +0 -0
  43. data/lib/monster_id/parts/hair_2.png +0 -0
  44. data/lib/monster_id/parts/hair_3.png +0 -0
  45. data/lib/monster_id/parts/hair_4.png +0 -0
  46. data/lib/monster_id/parts/hair_5.png +0 -0
  47. data/lib/monster_id/parts/image.info +57 -0
  48. data/lib/monster_id/parts/legs_1.png +0 -0
  49. data/lib/monster_id/parts/legs_2.png +0 -0
  50. data/lib/monster_id/parts/legs_3.png +0 -0
  51. data/lib/monster_id/parts/legs_4.png +0 -0
  52. data/lib/monster_id/parts/legs_5.png +0 -0
  53. data/lib/monster_id/parts/mouth_1.png +0 -0
  54. data/lib/monster_id/parts/mouth_10.png +0 -0
  55. data/lib/monster_id/parts/mouth_2.png +0 -0
  56. data/lib/monster_id/parts/mouth_3.png +0 -0
  57. data/lib/monster_id/parts/mouth_4.png +0 -0
  58. data/lib/monster_id/parts/mouth_5.png +0 -0
  59. data/lib/monster_id/parts/mouth_6.png +0 -0
  60. data/lib/monster_id/parts/mouth_7.png +0 -0
  61. data/lib/monster_id/parts/mouth_8.png +0 -0
  62. data/lib/monster_id/parts/mouth_9.png +0 -0
  63. data/lib/monster_id/version.rb +3 -0
  64. data/monster_id.gemspec +22 -0
  65. metadata +121 -0
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in monster_id.gemspec
4
+ gemspec
@@ -0,0 +1,15 @@
1
+ A Ruby port of [monsterid](http://www.splitbrain.org/go/monsterid).
2
+
3
+ ## Usage
4
+
5
+ Save a monster in a file:
6
+
7
+ MonsterID.new('your_seed').save('monster.png')
8
+
9
+ MonsterID.new('a_seed').to_data_uri
10
+
11
+ MonsterID.new('your_seed').to_s # raw png
12
+
13
+ ### License
14
+
15
+ License: [CC BY 3.0](http://creativecommons.org/licenses/by/3.0/)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,12 @@
1
+ require "monster_id/version"
2
+ require "monster_id/monster"
3
+
4
+ ##
5
+ # A Ruby port of http://www.splitbrain.org/projects/monsterid
6
+ module MonsterId
7
+
8
+ def self.generate(seed, size=nil)
9
+ Monster.new(seed, size)
10
+ end
11
+
12
+ end
@@ -0,0 +1,66 @@
1
+ require 'chunky_png'
2
+ require 'digest'
3
+ require 'base64'
4
+
5
+ module MonsterId
6
+
7
+ class Monster
8
+ SIZE = 120
9
+
10
+ def initialize(seed, size=nil)
11
+ srand Digest::MD5.hexdigest(seed.to_s).to_i(16)
12
+
13
+ # throw the dice for body parts
14
+ parts = {
15
+ legs: rand(5),
16
+ hair: rand(5),
17
+ arms: rand(5),
18
+ body: rand(15),
19
+ eyes: rand(15),
20
+ mouth: rand(10),
21
+ }
22
+
23
+ @image = ChunkyPNG::Image.new SIZE, SIZE, ChunkyPNG::Color::TRANSPARENT
24
+
25
+ parts.each do |name, number|
26
+ path = File.join File.dirname(__FILE__), 'parts', "#{name}_#{number + 1}.png"
27
+ part = ChunkyPNG::Image.from_file path
28
+
29
+ if name == :body
30
+ # random body color
31
+ w, h = part.width, part.height
32
+ r, g, b = rand(215) + 20, rand(215) + 20, rand(215) + 20
33
+ body_color = r * 256 * 256 * 256 + g * 256 * 256 + b * 256 + 255
34
+ part.pixels.each_with_index do |color, i|
35
+ unless color == 0 || color == 255
36
+ part[i % w, (i / w).to_i] = body_color
37
+ end
38
+ end
39
+ end
40
+
41
+ @image.compose!(part, 0, 0)
42
+ end
43
+
44
+ @image.resample_bilinear!(size, size) unless size == nil or size == SIZE
45
+
46
+ srand
47
+ end
48
+
49
+ def to_s
50
+ @image.to_datastream.to_s
51
+ end
52
+
53
+ def inspect
54
+ ''
55
+ end
56
+
57
+ def to_data_uri
58
+ 'data:image/png;base64,' + Base64.encode64(@image.to_s).gsub(/\n/, '')
59
+ end
60
+
61
+ def save(path)
62
+ @image.save(path)
63
+ end
64
+ end
65
+
66
+ end
@@ -0,0 +1,57 @@
1
+ image 120x120 /var/www/splitbrain/_static/monsterid/parts/monsterparts.xcf
2
+ layer 120x120 0,0 Mouth_10.png
3
+ layer 120x120 0,0 Mouth_9.png
4
+ layer 120x120 0,0 Mouth_8.png
5
+ layer 120x120 0,0 Mouth_7.png
6
+ layer 120x120 0,0 Mouth_6.png
7
+ layer 120x120 0,0 Mouth_5.png
8
+ layer 120x120 0,0 Mouth_4.png
9
+ layer 120x120 0,0 Mouth_3.png
10
+ layer 120x120 0,0 Mouth_2.png
11
+ layer 120x120 0,0 Mouth_1.png
12
+ layer 120x120 0,0 Eyes_15.png
13
+ layer 120x120 0,0 Eyes_14.png
14
+ layer 120x120 0,0 Eyes_13.png
15
+ layer 120x120 0,0 Eyes_12.png
16
+ layer 120x120 0,0 Eyes_11.png
17
+ layer 120x120 0,0 Eyes_10.png
18
+ layer 120x120 0,0 Eyes_9.png
19
+ layer 120x120 0,0 Eyes_8.png
20
+ layer 120x120 0,0 Eyes_7.png
21
+ layer 120x120 0,0 Eyes_6.png
22
+ layer 120x120 0,0 Eyes_5.png
23
+ layer 120x120 0,0 Eyes_4.png
24
+ layer 120x120 0,0 Eyes_3.png
25
+ layer 120x120 0,0 Eyes_2.png
26
+ layer 120x120 0,0 Eyes_1.png
27
+ layer 120x120 0,0 Body_15.png
28
+ layer 120x120 0,0 Body_14.png
29
+ layer 120x120 0,0 Body_13.png
30
+ layer 120x120 0,0 Body_12.png
31
+ layer 120x120 0,0 Body_11.png
32
+ layer 120x120 0,0 Body_10.png
33
+ layer 120x120 0,0 Body_9.png
34
+ layer 120x120 0,0 Body_8.png
35
+ layer 120x120 0,0 Body_7.png
36
+ layer 120x120 0,0 Body_6.png
37
+ layer 120x120 0,0 Body_5.png
38
+ layer 120x120 0,0 Body_4.png
39
+ layer 120x120 0,0 Body_3.png
40
+ layer 120x120 0,0 Body_2.png
41
+ layer 120x120 0,0 Body_1.png
42
+ layer 120x120 0,0 Arms_5.png
43
+ layer 120x120 0,0 Arms_4.png
44
+ layer 120x120 0,0 Arms_3.png
45
+ layer 120x120 0,0 Arms_2.png
46
+ layer 120x120 0,0 Arms_1.png
47
+ layer 120x120 0,0 Hair_5.png
48
+ layer 120x120 0,0 Hair_4.png
49
+ layer 120x120 0,0 Hair_3.png
50
+ layer 120x120 0,0 Hair_2.png
51
+ layer 120x120 0,0 Hair_1.png
52
+ layer 120x120 0,0 Legs_5.png
53
+ layer 120x120 0,0 Legs_4.png
54
+ layer 120x120 0,0 Legs_3.png
55
+ layer 120x120 0,0 Legs_2.png
56
+ layer 120x120 0,0 Legs_1.png
57
+ layer 120x120 0,0 Background
@@ -0,0 +1,3 @@
1
+ module MonsterId
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "monster_id/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "monster_id"
7
+ s.version = MonsterId::VERSION
8
+ s.authors = ["Irina Dumitrascu"]
9
+ s.email = ["me@dira.ro"]
10
+ s.homepage = ""
11
+ s.summary = %q{Generate random monster images.}
12
+ s.description = %q{A Ruby port of the MonsterID PHP script, using ChunkyPNG. http://www.splitbrain.org/projects/monsterid}
13
+
14
+ s.rubyforge_project = "monster_id"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_runtime_dependency "oily_png"
22
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: monster_id
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Irina Dumitrascu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-19 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: oily_png
16
+ requirement: &70096626620660 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70096626620660
25
+ description: A Ruby port of the MonsterID PHP script, using ChunkyPNG. http://www.splitbrain.org/projects/monsterid
26
+ email:
27
+ - me@dira.ro
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README.mkd
35
+ - Rakefile
36
+ - lib/monster_id.rb
37
+ - lib/monster_id/monster.rb
38
+ - lib/monster_id/parts/arms_1.png
39
+ - lib/monster_id/parts/arms_2.png
40
+ - lib/monster_id/parts/arms_3.png
41
+ - lib/monster_id/parts/arms_4.png
42
+ - lib/monster_id/parts/arms_5.png
43
+ - lib/monster_id/parts/body_1.png
44
+ - lib/monster_id/parts/body_10.png
45
+ - lib/monster_id/parts/body_11.png
46
+ - lib/monster_id/parts/body_12.png
47
+ - lib/monster_id/parts/body_13.png
48
+ - lib/monster_id/parts/body_14.png
49
+ - lib/monster_id/parts/body_15.png
50
+ - lib/monster_id/parts/body_2.png
51
+ - lib/monster_id/parts/body_3.png
52
+ - lib/monster_id/parts/body_4.png
53
+ - lib/monster_id/parts/body_5.png
54
+ - lib/monster_id/parts/body_6.png
55
+ - lib/monster_id/parts/body_7.png
56
+ - lib/monster_id/parts/body_8.png
57
+ - lib/monster_id/parts/body_9.png
58
+ - lib/monster_id/parts/eyes_1.png
59
+ - lib/monster_id/parts/eyes_10.png
60
+ - lib/monster_id/parts/eyes_11.png
61
+ - lib/monster_id/parts/eyes_12.png
62
+ - lib/monster_id/parts/eyes_13.png
63
+ - lib/monster_id/parts/eyes_14.png
64
+ - lib/monster_id/parts/eyes_15.png
65
+ - lib/monster_id/parts/eyes_2.png
66
+ - lib/monster_id/parts/eyes_3.png
67
+ - lib/monster_id/parts/eyes_4.png
68
+ - lib/monster_id/parts/eyes_5.png
69
+ - lib/monster_id/parts/eyes_6.png
70
+ - lib/monster_id/parts/eyes_7.png
71
+ - lib/monster_id/parts/eyes_8.png
72
+ - lib/monster_id/parts/eyes_9.png
73
+ - lib/monster_id/parts/hair_1.png
74
+ - lib/monster_id/parts/hair_2.png
75
+ - lib/monster_id/parts/hair_3.png
76
+ - lib/monster_id/parts/hair_4.png
77
+ - lib/monster_id/parts/hair_5.png
78
+ - lib/monster_id/parts/image.info
79
+ - lib/monster_id/parts/legs_1.png
80
+ - lib/monster_id/parts/legs_2.png
81
+ - lib/monster_id/parts/legs_3.png
82
+ - lib/monster_id/parts/legs_4.png
83
+ - lib/monster_id/parts/legs_5.png
84
+ - lib/monster_id/parts/mouth_1.png
85
+ - lib/monster_id/parts/mouth_10.png
86
+ - lib/monster_id/parts/mouth_2.png
87
+ - lib/monster_id/parts/mouth_3.png
88
+ - lib/monster_id/parts/mouth_4.png
89
+ - lib/monster_id/parts/mouth_5.png
90
+ - lib/monster_id/parts/mouth_6.png
91
+ - lib/monster_id/parts/mouth_7.png
92
+ - lib/monster_id/parts/mouth_8.png
93
+ - lib/monster_id/parts/mouth_9.png
94
+ - lib/monster_id/version.rb
95
+ - monster_id.gemspec
96
+ homepage: ''
97
+ licenses: []
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project: monster_id
116
+ rubygems_version: 1.8.10
117
+ signing_key:
118
+ specification_version: 3
119
+ summary: Generate random monster images.
120
+ test_files: []
121
+ has_rdoc: