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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.mkd +15 -0
- data/Rakefile +1 -0
- data/lib/monster_id.rb +12 -0
- data/lib/monster_id/monster.rb +66 -0
- data/lib/monster_id/parts/arms_1.png +0 -0
- data/lib/monster_id/parts/arms_2.png +0 -0
- data/lib/monster_id/parts/arms_3.png +0 -0
- data/lib/monster_id/parts/arms_4.png +0 -0
- data/lib/monster_id/parts/arms_5.png +0 -0
- data/lib/monster_id/parts/body_1.png +0 -0
- data/lib/monster_id/parts/body_10.png +0 -0
- data/lib/monster_id/parts/body_11.png +0 -0
- data/lib/monster_id/parts/body_12.png +0 -0
- data/lib/monster_id/parts/body_13.png +0 -0
- data/lib/monster_id/parts/body_14.png +0 -0
- data/lib/monster_id/parts/body_15.png +0 -0
- data/lib/monster_id/parts/body_2.png +0 -0
- data/lib/monster_id/parts/body_3.png +0 -0
- data/lib/monster_id/parts/body_4.png +0 -0
- data/lib/monster_id/parts/body_5.png +0 -0
- data/lib/monster_id/parts/body_6.png +0 -0
- data/lib/monster_id/parts/body_7.png +0 -0
- data/lib/monster_id/parts/body_8.png +0 -0
- data/lib/monster_id/parts/body_9.png +0 -0
- data/lib/monster_id/parts/eyes_1.png +0 -0
- data/lib/monster_id/parts/eyes_10.png +0 -0
- data/lib/monster_id/parts/eyes_11.png +0 -0
- data/lib/monster_id/parts/eyes_12.png +0 -0
- data/lib/monster_id/parts/eyes_13.png +0 -0
- data/lib/monster_id/parts/eyes_14.png +0 -0
- data/lib/monster_id/parts/eyes_15.png +0 -0
- data/lib/monster_id/parts/eyes_2.png +0 -0
- data/lib/monster_id/parts/eyes_3.png +0 -0
- data/lib/monster_id/parts/eyes_4.png +0 -0
- data/lib/monster_id/parts/eyes_5.png +0 -0
- data/lib/monster_id/parts/eyes_6.png +0 -0
- data/lib/monster_id/parts/eyes_7.png +0 -0
- data/lib/monster_id/parts/eyes_8.png +0 -0
- data/lib/monster_id/parts/eyes_9.png +0 -0
- data/lib/monster_id/parts/hair_1.png +0 -0
- data/lib/monster_id/parts/hair_2.png +0 -0
- data/lib/monster_id/parts/hair_3.png +0 -0
- data/lib/monster_id/parts/hair_4.png +0 -0
- data/lib/monster_id/parts/hair_5.png +0 -0
- data/lib/monster_id/parts/image.info +57 -0
- data/lib/monster_id/parts/legs_1.png +0 -0
- data/lib/monster_id/parts/legs_2.png +0 -0
- data/lib/monster_id/parts/legs_3.png +0 -0
- data/lib/monster_id/parts/legs_4.png +0 -0
- data/lib/monster_id/parts/legs_5.png +0 -0
- data/lib/monster_id/parts/mouth_1.png +0 -0
- data/lib/monster_id/parts/mouth_10.png +0 -0
- data/lib/monster_id/parts/mouth_2.png +0 -0
- data/lib/monster_id/parts/mouth_3.png +0 -0
- data/lib/monster_id/parts/mouth_4.png +0 -0
- data/lib/monster_id/parts/mouth_5.png +0 -0
- data/lib/monster_id/parts/mouth_6.png +0 -0
- data/lib/monster_id/parts/mouth_7.png +0 -0
- data/lib/monster_id/parts/mouth_8.png +0 -0
- data/lib/monster_id/parts/mouth_9.png +0 -0
- data/lib/monster_id/version.rb +3 -0
- data/monster_id.gemspec +22 -0
- metadata +121 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.mkd
ADDED
@@ -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/)
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/monster_id.rb
ADDED
@@ -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
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -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
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/monster_id.gemspec
ADDED
@@ -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:
|