punkmaker 0.3.0 → 0.3.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -1
- data/Manifest.txt +6 -0
- data/README.md +230 -160
- data/config/alien-female.png +0 -0
- data/config/alien-male.png +0 -0
- data/config/human-female4.png +0 -0
- data/config/human-male4.png +0 -0
- data/config/skintone/color_me_human.csv +78 -0
- data/config/skintone/dr_ellis_monk.csv +11 -0
- data/config/skintone/punks_not_dead.csv +39 -0
- data/config/skintone/ye_olde_punks.csv +5 -0
- data/config/zombie-female.png +0 -0
- data/config/zombie-male.png +0 -0
- data/lib/punkmaker/alien.rb +49 -15
- data/lib/punkmaker/ape.rb +15 -12
- data/lib/punkmaker/colors.rb +60 -0
- data/lib/punkmaker/demon.rb +15 -11
- data/lib/punkmaker/human.rb +78 -42
- data/lib/punkmaker/mummy.rb +17 -12
- data/lib/punkmaker/orc.rb +14 -11
- data/lib/punkmaker/robot.rb +14 -11
- data/lib/punkmaker/skeleton.rb +14 -11
- data/lib/punkmaker/skintone.rb +16 -0
- data/lib/punkmaker/vampire.rb +14 -11
- data/lib/punkmaker/version.rb +1 -1
- data/lib/punkmaker/zombie.rb +49 -16
- data/lib/punkmaker.rb +4 -0
- metadata +8 -2
data/lib/punkmaker/alien.rb
CHANGED
@@ -8,19 +8,60 @@ module Alien ## make it a class - why? why not?
|
|
8
8
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/alien-female.png" )
|
9
9
|
|
10
10
|
|
11
|
-
def self.make( color,
|
11
|
+
def self.make( color=nil,
|
12
|
+
shine: true,
|
12
13
|
gender: 'm' )
|
13
|
-
color_map = derive_color_map( color )
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
16
|
+
|
17
|
+
## note: make a copy of base
|
18
|
+
punk = Image.new( base.width, base.height )
|
19
|
+
punk.compose!( base )
|
20
|
+
|
21
|
+
if color ## change skin tone (& eyebrows)?
|
22
|
+
color_map = derive_color_map( color )
|
23
|
+
punk = punk.change_colors( color_map )
|
20
24
|
end
|
25
|
+
|
26
|
+
|
27
|
+
if shine
|
28
|
+
shine_color = color ? derive_shine( color ) : 0xf1ffffff
|
29
|
+
if gender == 'm'
|
30
|
+
punk[9,7] = shine_color
|
31
|
+
punk[8,8] = shine_color
|
32
|
+
else
|
33
|
+
punk[9,9] = shine_color
|
34
|
+
end
|
35
|
+
end
|
21
36
|
punk
|
22
37
|
end
|
23
38
|
|
39
|
+
|
40
|
+
def self.derive_shine( color )
|
41
|
+
## was before - reuse old formula- why? why not?
|
42
|
+
## todo/check - check "formula" used in skintones script for humans!!!
|
43
|
+
## lighter = Color.from_hsl(
|
44
|
+
## (h+1)%360, # todo/check: make lighter by -1 on hue? or +1????
|
45
|
+
## [1.0,s+0.10].min,
|
46
|
+
## [1.0,l+0.25].min)
|
47
|
+
|
48
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
49
|
+
|
50
|
+
hsv = Color.to_hsv( color )
|
51
|
+
# pp hsv
|
52
|
+
|
53
|
+
h, s, v = hsv
|
54
|
+
h = h % 360 # make always positive (might be -50 or such)
|
55
|
+
## pp [h,s,v]
|
56
|
+
|
57
|
+
## add extra saturation if v(alue) / brightness is max 1.0 - why? why not?
|
58
|
+
sdiff = v >= 0.99 ? 0.35 : 0.25
|
59
|
+
|
60
|
+
lighter = Color.from_hsv( h, [0.0, s-sdiff].max, [v+0.1,1.0].min )
|
61
|
+
lighter
|
62
|
+
end
|
63
|
+
|
64
|
+
|
24
65
|
|
25
66
|
def self.derive_color_map( color )
|
26
67
|
|
@@ -28,7 +69,7 @@ def self.derive_color_map( color )
|
|
28
69
|
# 125 pixels #c8fbfb / rgb(200 251 251) - hsl(180° 86% 88%) - base (use as base)
|
29
70
|
# 6 pixels #9be0e0 / rgb(155 224 224) - hsl(180° 53% 74%) - darker
|
30
71
|
# 2 pixels #75bdbd / rgb(117 189 189) - hsl(180° 35% 60%) - darkest
|
31
|
-
color = Color.
|
72
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
32
73
|
base = color
|
33
74
|
|
34
75
|
hsl = Color.to_hsl( color )
|
@@ -38,12 +79,6 @@ h, s, l = hsl
|
|
38
79
|
h = h % 360 # make always positive (might be -50 or such)
|
39
80
|
pp [h,s,l]
|
40
81
|
|
41
|
-
## todo/check - check "formula" used in skintones script for humans!!!
|
42
|
-
lighter = Color.from_hsl(
|
43
|
-
(h+1)%360, # todo/check: make lighter by -1 on hue? or +1????
|
44
|
-
[1.0,s+0.10].min,
|
45
|
-
[1.0,l+0.25].min)
|
46
|
-
|
47
82
|
|
48
83
|
darker = Color.from_hsl(
|
49
84
|
h,
|
@@ -58,7 +93,6 @@ darkest = Color.from_hsl(
|
|
58
93
|
|
59
94
|
color_map = {
|
60
95
|
'#c8fbfb' => base,
|
61
|
-
'#f1ffff' => lighter,
|
62
96
|
'#9be0e0' => darker,
|
63
97
|
'#75bdbd' => darkest,
|
64
98
|
}
|
data/lib/punkmaker/ape.rb
CHANGED
@@ -6,21 +6,24 @@ module Ape ## make it a class - why? why not?
|
|
6
6
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/ape-male.png" )
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/ape-female.png" )
|
8
8
|
|
9
|
-
def self.make( color,
|
9
|
+
def self.make( color=nil,
|
10
10
|
gender: 'm' )
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
punk
|
20
|
-
|
11
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
12
|
+
|
13
|
+
## note: make a copy of base
|
14
|
+
punk = Image.new( base.width, base.height )
|
15
|
+
punk.compose!( base )
|
16
|
+
|
17
|
+
if color
|
18
|
+
color_map = derive_color_map( color )
|
19
|
+
punk = punk.change_colors( color_map )
|
20
|
+
end
|
21
|
+
|
22
|
+
punk
|
23
|
+
end
|
21
24
|
|
22
25
|
def self.derive_color_map( color )
|
23
|
-
color = Color.
|
26
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
24
27
|
|
25
28
|
darkest = color
|
26
29
|
|
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
class ColorBundle
|
3
|
+
|
4
|
+
def self.read( *paths )
|
5
|
+
recs = []
|
6
|
+
paths.each do |path|
|
7
|
+
recs += read_csv( path )
|
8
|
+
end
|
9
|
+
new( recs )
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.normalize_key( str )
|
13
|
+
## remove all non-alphanum chars (a-z,0-9)
|
14
|
+
str.downcase.gsub(/[^a-z0-9]/, '').strip
|
15
|
+
end
|
16
|
+
def normalize_key( str ) self.class.normalize_key( str ); end
|
17
|
+
|
18
|
+
|
19
|
+
def initialize( recs )
|
20
|
+
@recs = recs
|
21
|
+
@colors_by_key = _build_colors_by_key( @recs )
|
22
|
+
end
|
23
|
+
|
24
|
+
def records() @recs; end
|
25
|
+
|
26
|
+
def find_by( name: )
|
27
|
+
key = normalize_key( name ) ## normalize q(uery) string/symbol
|
28
|
+
@colors_by_key[ key ]
|
29
|
+
end
|
30
|
+
|
31
|
+
def _find( name ) find_by( name: name ); end
|
32
|
+
alias_method :[], :_find
|
33
|
+
|
34
|
+
|
35
|
+
######
|
36
|
+
## helpers
|
37
|
+
def _build_colors_by_key( recs )
|
38
|
+
h = {}
|
39
|
+
recs.each_with_index do |rec|
|
40
|
+
|
41
|
+
color = Color.from_hex( rec['color'] )
|
42
|
+
names = (rec['names'] || '').split( '|' )
|
43
|
+
|
44
|
+
names.each do |name|
|
45
|
+
key = normalize_key( name )
|
46
|
+
|
47
|
+
if h[ key ]
|
48
|
+
puts "!!! ERROR - color name is not unique:"
|
49
|
+
pp rec
|
50
|
+
puts "duplicate:"
|
51
|
+
pp h[key]
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
h[ key ] = color
|
55
|
+
end
|
56
|
+
end
|
57
|
+
h
|
58
|
+
end
|
59
|
+
|
60
|
+
end # class ColorBundle
|
data/lib/punkmaker/demon.rb
CHANGED
@@ -6,21 +6,25 @@ module Demon ## make it a class - why? why not?
|
|
6
6
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/demon-male.png" )
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/demon-female.png" )
|
8
8
|
|
9
|
-
def self.make( color,
|
9
|
+
def self.make( color=nil,
|
10
10
|
gender: 'm' )
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
punk
|
11
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
12
|
+
|
13
|
+
## note: make a copy of base
|
14
|
+
punk = Image.new( base.width, base.height )
|
15
|
+
punk.compose!( base )
|
16
|
+
|
17
|
+
if color
|
18
|
+
color_map = derive_color_map( color )
|
19
|
+
punk = punk.change_colors( color_map )
|
20
|
+
end
|
21
|
+
|
22
|
+
punk
|
23
|
+
|
20
24
|
end
|
21
25
|
|
22
26
|
def self.derive_color_map( color )
|
23
|
-
color = Color.
|
27
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
24
28
|
|
25
29
|
# 134 pixels #850008 / rgb(133 0 8) - hsl(356° 100% 26%) - base
|
26
30
|
# 2 pixels #630006 / rgb( 99 0 6) - hsl(356° 100% 19%) - darker
|
data/lib/punkmaker/human.rb
CHANGED
@@ -8,47 +8,95 @@ module Human ## make it a class - why? why not?
|
|
8
8
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/human-female4.png" )
|
9
9
|
|
10
10
|
|
11
|
-
|
11
|
+
|
12
|
+
def self.parse_skintone( color ) ## lookup skintone by name or rgb(a) hex string or integer "true color"
|
13
|
+
if color.is_a?( String )
|
14
|
+
Skintone[ color ] || Color.from_hex( color )
|
15
|
+
else ## assume color is integer - assert - why? why not?
|
16
|
+
color
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.parse_eye_color( color )
|
21
|
+
if color.is_a?( String )
|
22
|
+
Color.from_hex( color )
|
23
|
+
else
|
24
|
+
color
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
def self.make( color=nil,
|
31
|
+
shine: true,
|
12
32
|
eye_color: nil,
|
13
33
|
gender: 'm' )
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
punk =
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
|
35
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
36
|
+
|
37
|
+
## note: make a copy of base
|
38
|
+
punk = Image.new( base.width, base.height )
|
39
|
+
punk.compose!( base )
|
40
|
+
|
41
|
+
|
42
|
+
skintone = color ? parse_skintone( color ) : nil
|
43
|
+
if skintone ## change skin tone (& eyebrows)?
|
44
|
+
color_map = derive_color_map( skintone )
|
45
|
+
punk = punk.change_colors( color_map )
|
46
|
+
end
|
47
|
+
|
48
|
+
if eye_color ## change eye color?
|
49
|
+
eye_color = parse_eye_color( eye_color )
|
50
|
+
if gender == 'm'
|
51
|
+
punk[9,12] = eye_color
|
52
|
+
punk[14,12] = eye_color
|
53
|
+
else
|
54
|
+
punk[9,13] = eye_color
|
55
|
+
punk[14,13] = eye_color
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if shine ## add shine?
|
60
|
+
# note: default shine color is white
|
61
|
+
shine_color = skintone ? derive_shine( skintone ) : 0xffffffff
|
62
|
+
if gender == 'm'
|
63
|
+
punk[9,7] = shine_color
|
64
|
+
punk[8,8] = shine_color
|
65
|
+
else
|
66
|
+
punk[9,9] = shine_color
|
67
|
+
end
|
37
68
|
end
|
38
69
|
|
39
70
|
punk
|
40
71
|
end
|
41
72
|
|
42
73
|
|
74
|
+
def self.derive_shine( color )
|
75
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
76
|
+
|
77
|
+
hsv = Color.to_hsv( color )
|
78
|
+
# pp hsv
|
79
|
+
|
80
|
+
h, s, v = hsv
|
81
|
+
h = h % 360 # make always positive (might be -50 or such)
|
82
|
+
## pp [h,s,v]
|
83
|
+
|
84
|
+
## add extra saturation if v(alue) / brightness is max 1.0 - why? why not?
|
85
|
+
sdiff = v >= 0.99 ? 0.25 : 0.15
|
86
|
+
|
87
|
+
lighter = Color.from_hsv( h, [0.0, s-sdiff].max, [v+0.1,1.0].min )
|
88
|
+
lighter
|
89
|
+
end
|
90
|
+
|
91
|
+
|
43
92
|
##
|
44
93
|
## todo/check:
|
45
94
|
## add a derive_colors or dervice_skintones method - why? why not?
|
46
95
|
## - change to name skintone_palette - why? why not?
|
47
96
|
## def self.derive_skintone_colors( color or base ) ???
|
48
97
|
|
49
|
-
|
50
98
|
def self.derive_color_map( color )
|
51
|
-
color = Color.
|
99
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
52
100
|
|
53
101
|
base = color
|
54
102
|
|
@@ -59,28 +107,16 @@ module Human ## make it a class - why? why not?
|
|
59
107
|
h = h % 360 # make always positive (might be -50 or such)
|
60
108
|
pp [h,s,l]
|
61
109
|
|
62
|
-
darker = Color.from_hsl(
|
63
|
-
h,
|
64
|
-
[0.0, s-0.05].max,
|
65
|
-
[0.14, l-0.1].max)
|
66
|
-
|
67
110
|
## sub one degree on hue on color wheel (plus +10% on lightness??)
|
68
|
-
|
69
|
-
|
111
|
+
## darker
|
112
|
+
eyebrows = Color.from_hsl(
|
113
|
+
h,
|
70
114
|
s,
|
71
115
|
[0.05, l-0.1].max)
|
72
116
|
|
73
|
-
|
74
|
-
lighter = Color.from_hsl(
|
75
|
-
(h+1) % 360,
|
76
|
-
s,
|
77
|
-
[1.0, l+0.1].min)
|
78
|
-
|
79
117
|
color_map = {
|
80
118
|
'#ead9d9' => base,
|
81
|
-
'#
|
82
|
-
'#a58d8d' => darkest,
|
83
|
-
'#c9b2b2' => darker
|
119
|
+
'#a58d8d' => eyebrows,
|
84
120
|
}
|
85
121
|
color_map
|
86
122
|
end
|
data/lib/punkmaker/mummy.rb
CHANGED
@@ -7,32 +7,37 @@ module Punk
|
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/mummy-female.png" )
|
8
8
|
|
9
9
|
|
10
|
-
def self.make( color,
|
10
|
+
def self.make( color=nil,
|
11
11
|
eye_color: nil,
|
12
12
|
gender: 'm' )
|
13
|
-
|
13
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
14
|
+
|
15
|
+
## note: make a copy of base
|
16
|
+
punk = Image.new( base.width, base.height )
|
17
|
+
punk.compose!( base )
|
18
|
+
|
19
|
+
if color
|
20
|
+
color_map = derive_color_map( color )
|
21
|
+
punk = punk.change_colors( color_map )
|
22
|
+
end
|
14
23
|
|
15
|
-
|
24
|
+
if eye_color
|
25
|
+
eye_color = Color.from_hex( eye_color ) if eye_color.is_a?( String )
|
16
26
|
|
17
|
-
punk = nil
|
18
27
|
if gender == 'm'
|
19
|
-
punk = BASE_M.change_colors( color_map )
|
20
|
-
if eye_color
|
21
28
|
punk[9,12] = eye_color
|
22
29
|
punk[14,12] = eye_color
|
23
|
-
end
|
24
30
|
else ## assume 'f'
|
25
|
-
punk = BASE_F.change_colors( color_map )
|
26
|
-
if eye_color
|
27
31
|
punk[10,13] = eye_color ## note: eye pos +1 pix!!
|
28
32
|
punk[14,13] = eye_color
|
29
|
-
end
|
30
33
|
end
|
31
|
-
punk
|
32
34
|
end
|
35
|
+
punk
|
36
|
+
end
|
37
|
+
|
33
38
|
|
34
39
|
def self.derive_color_map( color )
|
35
|
-
color = Color.
|
40
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
36
41
|
|
37
42
|
# 385 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
|
38
43
|
# 52 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
|
data/lib/punkmaker/orc.rb
CHANGED
@@ -6,21 +6,24 @@ module Orc ## make it a class - why? why not?
|
|
6
6
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/orc-male.png" )
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/orc-female.png" )
|
8
8
|
|
9
|
-
def self.make( color,
|
9
|
+
def self.make( color=nil,
|
10
10
|
gender: 'm' )
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
punk
|
11
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
12
|
+
|
13
|
+
## note: make a copy of base
|
14
|
+
punk = Image.new( base.width, base.height )
|
15
|
+
punk.compose!( base )
|
16
|
+
|
17
|
+
if color
|
18
|
+
color_map = derive_color_map( color )
|
19
|
+
punk = punk.change_colors( color_map )
|
20
|
+
end
|
21
|
+
|
22
|
+
punk
|
20
23
|
end
|
21
24
|
|
22
25
|
def self.derive_color_map( color )
|
23
|
-
color = Color.
|
26
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
24
27
|
|
25
28
|
# 380 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
|
26
29
|
# 63 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
|
data/lib/punkmaker/robot.rb
CHANGED
@@ -6,21 +6,24 @@ module Robot ## make it a class - why? why not?
|
|
6
6
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/robot-male.png" )
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/robot-female.png" )
|
8
8
|
|
9
|
-
def self.make( color,
|
9
|
+
def self.make( color=nil,
|
10
10
|
gender: 'm' )
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
punk
|
11
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
12
|
+
|
13
|
+
## note: make a copy of base
|
14
|
+
punk = Image.new( base.width, base.height )
|
15
|
+
punk.compose!( base )
|
16
|
+
|
17
|
+
if color
|
18
|
+
color_map = derive_color_map( color )
|
19
|
+
punk = punk.change_colors( color_map )
|
20
|
+
end
|
21
|
+
|
22
|
+
punk
|
20
23
|
end
|
21
24
|
|
22
25
|
def self.derive_color_map( color )
|
23
|
-
color = Color.
|
26
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
24
27
|
|
25
28
|
# 384 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
|
26
29
|
# 74 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
|
data/lib/punkmaker/skeleton.rb
CHANGED
@@ -5,21 +5,24 @@ module Skeleton ## make it a class - why? why not?
|
|
5
5
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/skeleton-male.png" )
|
6
6
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/skeleton-female.png" )
|
7
7
|
|
8
|
-
def self.make( color,
|
8
|
+
def self.make( color=nil,
|
9
9
|
gender: 'm' )
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
punk
|
10
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
11
|
+
|
12
|
+
## note: make a copy of base
|
13
|
+
punk = Image.new( base.width, base.height )
|
14
|
+
punk.compose!( base )
|
15
|
+
|
16
|
+
if color
|
17
|
+
color_map = derive_color_map( color )
|
18
|
+
punk = punk.change_colors( color_map )
|
19
|
+
end
|
20
|
+
|
21
|
+
punk
|
19
22
|
end
|
20
23
|
|
21
24
|
def self.derive_color_map( color )
|
22
|
-
color = Color.
|
25
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
23
26
|
|
24
27
|
# 122 pixels #e0e0e0 / rgb(224 224 224) - hsl( 0° 0% 88%) - 8-BIT GRAYSCALE #224
|
25
28
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
module Punk
|
3
|
+
module Skintone
|
4
|
+
|
5
|
+
def self.bundle
|
6
|
+
@bundle ||= ColorBundle.read(
|
7
|
+
'./config/skintone/ye_olde_punks.csv',
|
8
|
+
'./config/skintone/color_me_human.csv',
|
9
|
+
'./config/skintone/dr_ellis_monk.csv',
|
10
|
+
'./config/skintone/punks_not_dead.csv' )
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.[]( name ) bundle.find_by( name: name ); end
|
14
|
+
end # module Skintone
|
15
|
+
end # module Punk
|
16
|
+
|
data/lib/punkmaker/vampire.rb
CHANGED
@@ -6,21 +6,24 @@ module Vampire ## make it a class - why? why not?
|
|
6
6
|
BASE_M = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/vampire-male.png" )
|
7
7
|
BASE_F = Image.read( "#{Pixelart::Module::Punkmaker.root}/config/vampire-female.png" )
|
8
8
|
|
9
|
-
def self.make( color,
|
9
|
+
def self.make( color=nil,
|
10
10
|
gender: 'm' )
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
punk
|
11
|
+
base = gender == 'm' ? BASE_M : BASE_F
|
12
|
+
|
13
|
+
## note: make a copy of base
|
14
|
+
punk = Image.new( base.width, base.height )
|
15
|
+
punk.compose!( base )
|
16
|
+
|
17
|
+
if color
|
18
|
+
color_map = derive_color_map( color )
|
19
|
+
punk = punk.change_colors( color_map )
|
20
|
+
end
|
21
|
+
|
22
|
+
punk
|
20
23
|
end
|
21
24
|
|
22
25
|
def self.derive_color_map( color )
|
23
|
-
color = Color.
|
26
|
+
color = Color.from_hex( color ) if color.is_a?( String )
|
24
27
|
|
25
28
|
# 366 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - α( 0%) - TRANSPARENT
|
26
29
|
# 67 pixels #000000 / rgb( 0 0 0) - hsl( 0° 0% 0%) - hsv( 0° 0% 0%) - BLACK
|