monster_id 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: