cryptopunks 2.1.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/Manifest.txt +0 -3
- data/README.md +666 -633
- data/Rakefile +40 -32
- data/bin/cryptopunk +17 -17
- data/bin/punk +17 -17
- data/lib/cryptopunks/attributes.rb +147 -147
- data/lib/cryptopunks/colors.rb +162 -162
- data/lib/cryptopunks/composite.rb +38 -38
- data/lib/cryptopunks/contract/punksdata-assets.rb +338 -338
- data/lib/cryptopunks/contract/punksdata-contract.rb +55 -55
- data/lib/cryptopunks/contract/punksdata-meta.rb +2107 -2107
- data/lib/cryptopunks/dataset.rb +67 -67
- data/lib/cryptopunks/image.rb +35 -33
- data/lib/cryptopunks/structs.rb +161 -161
- data/lib/cryptopunks/tool.rb +382 -381
- data/lib/cryptopunks/version.rb +27 -23
- data/lib/cryptopunks.rb +66 -194
- metadata +16 -19
- data/config/spritesheet.csv +0 -762
- data/config/spritesheet.png +0 -0
- data/lib/cryptopunks/generator.rb +0 -309
data/lib/cryptopunks/colors.rb
CHANGED
@@ -1,162 +1,162 @@
|
|
1
|
-
|
2
|
-
ROBOT_COLORS = [
|
3
|
-
'000000', # color 1 - BLACK
|
4
|
-
'535353', # color 2 - BASE 2 (DARKER)
|
5
|
-
'A4A4A4', # color 3 - BASE 1
|
6
|
-
'A9F7FF', # color 4 - BASE 3 (LIGHTER) - eyes
|
7
|
-
]
|
8
|
-
|
9
|
-
VAMPIRE_COLORS = [
|
10
|
-
'000000', # color 1 - BLACK
|
11
|
-
'131313', # color 2 - BASE 4 (DARKEST)
|
12
|
-
'535353', # color 3 - BASE 3 (DARKERER) - eyes
|
13
|
-
'A4A4A4', # color 4 - BASE 2 (DARKER) - eyes
|
14
|
-
'E0E0E0', # color 5 - BASE 1
|
15
|
-
'F6000B', # color 6 - BASE 5 - teeth - red
|
16
|
-
]
|
17
|
-
|
18
|
-
MUMMY_COLORS = [
|
19
|
-
'000000', # color 1 - BLACK
|
20
|
-
'1F1A15', # color 2 - BASE 5 (DARKEST)
|
21
|
-
'2A231C', # color 3 - BASE 4 (DARKERERER)
|
22
|
-
'5F5147', # color 4 - BASE 3 (DARKERER)
|
23
|
-
'927B6A', # color 5 - BASE 2 (DARKER)
|
24
|
-
'D9B599', # color 6 - BASE 1
|
25
|
-
'F6000B', # color 7 - BASE 6 - eyes - red
|
26
|
-
]
|
27
|
-
|
28
|
-
ORC_COLORS = [
|
29
|
-
'000000', # color 1 - BLACK
|
30
|
-
'171a08', # color 2 - BASE 3 (DARKEST)
|
31
|
-
'333F0C', # color 3 - BASE 2 (DARKER)
|
32
|
-
'50650E', # color 4 - BASE 1
|
33
|
-
'FFFFFF', # color 5 - BASE 4 - white
|
34
|
-
]
|
35
|
-
|
36
|
-
SKELETON_COLORS = [
|
37
|
-
'000000', # color 1 - BLACK
|
38
|
-
'e0e0e0', # color 2 - BASE 1
|
39
|
-
]
|
40
|
-
|
41
|
-
DEMON_COLORS = [
|
42
|
-
'000000', # color 1 - BLACK
|
43
|
-
'390102', # color 2 - BASE 3 (DARKEST) - eyes
|
44
|
-
'630006', # color 3 - BASE 2 (DARKER) - eyes
|
45
|
-
'850008', # color 4 - BASE 1
|
46
|
-
]
|
47
|
-
|
48
|
-
ZOMBIE_COLORS = [
|
49
|
-
'000000', # color 1 - BLACK
|
50
|
-
'5e7253', # color 2 - BASE 2 (DARKER)
|
51
|
-
'7da269', # color 3 - BASE 1
|
52
|
-
'ff0000', # color 4 - BASE 3 - red eye
|
53
|
-
'9bbc88', # color 5 - BASE 4 (LIGHTER)
|
54
|
-
'4a010d', # color 6 - BASE 5 - mouth (female only)
|
55
|
-
]
|
56
|
-
|
57
|
-
APE_COLORS = [
|
58
|
-
'000000', # color 1 - BLACK
|
59
|
-
'352410', # color 2 - BASE 3 (DARKEST)
|
60
|
-
'6a563f', # color 3 - BASE 2 (DARKER) - eyes
|
61
|
-
'856f56', # color 4 - BASE 1
|
62
|
-
'a98c6b', # color 5 - BASE 4 (LIGHTER) - eyes
|
63
|
-
]
|
64
|
-
|
65
|
-
ALIEN_COLORS = [
|
66
|
-
'000000', # color 1 - BLACK
|
67
|
-
'75bdbd', # color 2 - BASE 3 (DARKEST)
|
68
|
-
'9be0e0', # color 3 - BASE 2 (DARKER)
|
69
|
-
'c8fbfb', # color 4 - BASE 1
|
70
|
-
]
|
71
|
-
|
72
|
-
|
73
|
-
HUMAN_LIGHTER_BASE1 = 'ead9d9' # rgb(234 217 217) - hsl( 0° 29% 88%)
|
74
|
-
HUMAN_LIGHTER_BASE2 = 'c9b2b2' # rgb(201 178 178) - hsl( 0° 18% 74%) - eyes
|
75
|
-
HUMAN_LIGHTER_BASE3 = 'a58d8d' # rgb(165 141 141) - hsl( 0° 12% 60%) - eyes
|
76
|
-
HUMAN_LIGHTER_BASE4 = 'ffffff' # rgb(255 255 255) - hsl( 0° 0% 100%) -- white
|
77
|
-
HUMAN_LIGHTER_BASE5 = '711010' # rgb(113 16 16) - hsl( 0° 75% 25%) - mouth
|
78
|
-
|
79
|
-
HUMAN_LIGHT_BASE1 = 'dbb180' # rgb(219 177 128) - hsl( 32° 56% 68%)
|
80
|
-
HUMAN_LIGHT_BASE2 = 'd29d60' # rgb(210 157 96) - hsl( 32° 56% 60%) - eyes
|
81
|
-
HUMAN_LIGHT_BASE3 = 'a66e2c' # rgb(166 110 44) - hsl( 32° 58% 41%) - eyes
|
82
|
-
HUMAN_LIGHT_BASE4 = 'e7cba9' # rgb(231 203 169) - hsl( 33° 56% 78%)
|
83
|
-
HUMAN_LIGHT_BASE5 = '711010' # rgb(113 16 16) - hsl( 0° 75% 25%) - mouth
|
84
|
-
|
85
|
-
HUMAN_DARK_BASE1 = 'ae8b61' # rgb(174 139 97) - hsl( 33° 32% 53%)
|
86
|
-
HUMAN_DARK_BASE2 = 'a77c47' # rgb(167 124 71) - hsl( 33° 40% 47%) - eyes
|
87
|
-
HUMAN_DARK_BASE3 = '86581e' # rgb(134 88 30) - hsl( 33° 63% 32%) - eyes
|
88
|
-
HUMAN_DARK_BASE4 = 'b69f82' # rgb(182 159 130) - hsl( 33° 26% 61%)
|
89
|
-
HUMAN_DARK_BASE5 = '5f1d09' # rgb( 95 29 9) - hsl( 14° 83% 20%) - mouth
|
90
|
-
|
91
|
-
HUMAN_DARKER_BASE1 = '713f1d' # rgb(113 63 29) - hsl( 24° 59% 28%)
|
92
|
-
HUMAN_DARKER_BASE2 = '723709' # rgb(114 55 9) - hsl( 26° 85% 24%) - eyes
|
93
|
-
HUMAN_DARKER_BASE3 = '562600' # rgb( 86 38 0) - hsl( 27° 100% 17%) - eyes
|
94
|
-
HUMAN_DARKER_BASE4 = '8b532c' # rgb(139 83 44) - hsl( 25° 52% 36%)
|
95
|
-
HUMAN_DARKER_BASE5 = '4a1201' # rgb( 74 18 1) - hsl( 14° 97% 15%) - mouth
|
96
|
-
|
97
|
-
|
98
|
-
HUMAN_COLORS_LIGHT = [ ## todo/check: change to HUMAN_LIGHT_COLORS???
|
99
|
-
'000000', # color 1 - BLACK
|
100
|
-
HUMAN_LIGHT_BASE3, # color 2 - BASE 3 (DARKEST) - eyes
|
101
|
-
HUMAN_LIGHT_BASE2, # color 3 - BASE 2 (DARKER) - eyes
|
102
|
-
HUMAN_LIGHT_BASE1, # color 4 - BASE 1
|
103
|
-
HUMAN_LIGHT_BASE4, # color 5 - BASE 4
|
104
|
-
HUMAN_LIGHT_BASE5, # color 6 - BASE 5 - mouth (femaly only)
|
105
|
-
]
|
106
|
-
|
107
|
-
HUMAN_COLORS_LIGHTER = [ ## todo/check: change to HUMAN_LIGHTER_COLORS?? or add alias - why? why not?
|
108
|
-
'000000', # color 1 - BLACK
|
109
|
-
HUMAN_LIGHTER_BASE3,
|
110
|
-
HUMAN_LIGHTER_BASE2,
|
111
|
-
HUMAN_LIGHTER_BASE1,
|
112
|
-
HUMAN_LIGHTER_BASE4,
|
113
|
-
HUMAN_LIGHTER_BASE5,
|
114
|
-
]
|
115
|
-
|
116
|
-
HUMAN_COLORS_DARK = [
|
117
|
-
'000000', # color 1 - BLACK
|
118
|
-
HUMAN_DARK_BASE3,
|
119
|
-
HUMAN_DARK_BASE2,
|
120
|
-
HUMAN_DARK_BASE1,
|
121
|
-
HUMAN_DARK_BASE4,
|
122
|
-
HUMAN_DARK_BASE5,
|
123
|
-
]
|
124
|
-
|
125
|
-
HUMAN_COLORS_DARKER = [
|
126
|
-
'000000', # color 1 - BLACK
|
127
|
-
HUMAN_DARKER_BASE3,
|
128
|
-
HUMAN_DARKER_BASE2,
|
129
|
-
HUMAN_DARKER_BASE1,
|
130
|
-
HUMAN_DARKER_BASE4,
|
131
|
-
HUMAN_DARKER_BASE5,
|
132
|
-
]
|
133
|
-
|
134
|
-
|
135
|
-
HUMAN_COLORS = {
|
136
|
-
'light' => HUMAN_COLORS_LIGHT,
|
137
|
-
'lighter' => HUMAN_COLORS_LIGHTER,
|
138
|
-
'dark' => HUMAN_COLORS_DARK,
|
139
|
-
'darker' => HUMAN_COLORS_DARKER,
|
140
|
-
}
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
### todo/check:
|
145
|
-
## use a different name other than the "generic" COLORS - why? why not?
|
146
|
-
|
147
|
-
COLORS = {
|
148
|
-
## original series
|
149
|
-
'human' => HUMAN_COLORS,
|
150
|
-
'zombie' => ZOMBIE_COLORS,
|
151
|
-
'ape' => APE_COLORS,
|
152
|
-
'alien' => ALIEN_COLORS,
|
153
|
-
## more series
|
154
|
-
'vampire' => VAMPIRE_COLORS,
|
155
|
-
'mummy' => MUMMY_COLORS,
|
156
|
-
'orc' => ORC_COLORS,
|
157
|
-
'skeleton' => SKELETON_COLORS,
|
158
|
-
'demon' => DEMON_COLORS,
|
159
|
-
'robot' => ROBOT_COLORS,
|
160
|
-
}
|
161
|
-
|
162
|
-
|
1
|
+
|
2
|
+
ROBOT_COLORS = [
|
3
|
+
'000000', # color 1 - BLACK
|
4
|
+
'535353', # color 2 - BASE 2 (DARKER)
|
5
|
+
'A4A4A4', # color 3 - BASE 1
|
6
|
+
'A9F7FF', # color 4 - BASE 3 (LIGHTER) - eyes
|
7
|
+
]
|
8
|
+
|
9
|
+
VAMPIRE_COLORS = [
|
10
|
+
'000000', # color 1 - BLACK
|
11
|
+
'131313', # color 2 - BASE 4 (DARKEST)
|
12
|
+
'535353', # color 3 - BASE 3 (DARKERER) - eyes
|
13
|
+
'A4A4A4', # color 4 - BASE 2 (DARKER) - eyes
|
14
|
+
'E0E0E0', # color 5 - BASE 1
|
15
|
+
'F6000B', # color 6 - BASE 5 - teeth - red
|
16
|
+
]
|
17
|
+
|
18
|
+
MUMMY_COLORS = [
|
19
|
+
'000000', # color 1 - BLACK
|
20
|
+
'1F1A15', # color 2 - BASE 5 (DARKEST)
|
21
|
+
'2A231C', # color 3 - BASE 4 (DARKERERER)
|
22
|
+
'5F5147', # color 4 - BASE 3 (DARKERER)
|
23
|
+
'927B6A', # color 5 - BASE 2 (DARKER)
|
24
|
+
'D9B599', # color 6 - BASE 1
|
25
|
+
'F6000B', # color 7 - BASE 6 - eyes - red
|
26
|
+
]
|
27
|
+
|
28
|
+
ORC_COLORS = [
|
29
|
+
'000000', # color 1 - BLACK
|
30
|
+
'171a08', # color 2 - BASE 3 (DARKEST)
|
31
|
+
'333F0C', # color 3 - BASE 2 (DARKER)
|
32
|
+
'50650E', # color 4 - BASE 1
|
33
|
+
'FFFFFF', # color 5 - BASE 4 - white
|
34
|
+
]
|
35
|
+
|
36
|
+
SKELETON_COLORS = [
|
37
|
+
'000000', # color 1 - BLACK
|
38
|
+
'e0e0e0', # color 2 - BASE 1
|
39
|
+
]
|
40
|
+
|
41
|
+
DEMON_COLORS = [
|
42
|
+
'000000', # color 1 - BLACK
|
43
|
+
'390102', # color 2 - BASE 3 (DARKEST) - eyes
|
44
|
+
'630006', # color 3 - BASE 2 (DARKER) - eyes
|
45
|
+
'850008', # color 4 - BASE 1
|
46
|
+
]
|
47
|
+
|
48
|
+
ZOMBIE_COLORS = [
|
49
|
+
'000000', # color 1 - BLACK
|
50
|
+
'5e7253', # color 2 - BASE 2 (DARKER)
|
51
|
+
'7da269', # color 3 - BASE 1
|
52
|
+
'ff0000', # color 4 - BASE 3 - red eye
|
53
|
+
'9bbc88', # color 5 - BASE 4 (LIGHTER)
|
54
|
+
'4a010d', # color 6 - BASE 5 - mouth (female only)
|
55
|
+
]
|
56
|
+
|
57
|
+
APE_COLORS = [
|
58
|
+
'000000', # color 1 - BLACK
|
59
|
+
'352410', # color 2 - BASE 3 (DARKEST)
|
60
|
+
'6a563f', # color 3 - BASE 2 (DARKER) - eyes
|
61
|
+
'856f56', # color 4 - BASE 1
|
62
|
+
'a98c6b', # color 5 - BASE 4 (LIGHTER) - eyes
|
63
|
+
]
|
64
|
+
|
65
|
+
ALIEN_COLORS = [
|
66
|
+
'000000', # color 1 - BLACK
|
67
|
+
'75bdbd', # color 2 - BASE 3 (DARKEST)
|
68
|
+
'9be0e0', # color 3 - BASE 2 (DARKER)
|
69
|
+
'c8fbfb', # color 4 - BASE 1
|
70
|
+
]
|
71
|
+
|
72
|
+
|
73
|
+
HUMAN_LIGHTER_BASE1 = 'ead9d9' # rgb(234 217 217) - hsl( 0° 29% 88%)
|
74
|
+
HUMAN_LIGHTER_BASE2 = 'c9b2b2' # rgb(201 178 178) - hsl( 0° 18% 74%) - eyes
|
75
|
+
HUMAN_LIGHTER_BASE3 = 'a58d8d' # rgb(165 141 141) - hsl( 0° 12% 60%) - eyes
|
76
|
+
HUMAN_LIGHTER_BASE4 = 'ffffff' # rgb(255 255 255) - hsl( 0° 0% 100%) -- white
|
77
|
+
HUMAN_LIGHTER_BASE5 = '711010' # rgb(113 16 16) - hsl( 0° 75% 25%) - mouth
|
78
|
+
|
79
|
+
HUMAN_LIGHT_BASE1 = 'dbb180' # rgb(219 177 128) - hsl( 32° 56% 68%)
|
80
|
+
HUMAN_LIGHT_BASE2 = 'd29d60' # rgb(210 157 96) - hsl( 32° 56% 60%) - eyes
|
81
|
+
HUMAN_LIGHT_BASE3 = 'a66e2c' # rgb(166 110 44) - hsl( 32° 58% 41%) - eyes
|
82
|
+
HUMAN_LIGHT_BASE4 = 'e7cba9' # rgb(231 203 169) - hsl( 33° 56% 78%)
|
83
|
+
HUMAN_LIGHT_BASE5 = '711010' # rgb(113 16 16) - hsl( 0° 75% 25%) - mouth
|
84
|
+
|
85
|
+
HUMAN_DARK_BASE1 = 'ae8b61' # rgb(174 139 97) - hsl( 33° 32% 53%)
|
86
|
+
HUMAN_DARK_BASE2 = 'a77c47' # rgb(167 124 71) - hsl( 33° 40% 47%) - eyes
|
87
|
+
HUMAN_DARK_BASE3 = '86581e' # rgb(134 88 30) - hsl( 33° 63% 32%) - eyes
|
88
|
+
HUMAN_DARK_BASE4 = 'b69f82' # rgb(182 159 130) - hsl( 33° 26% 61%)
|
89
|
+
HUMAN_DARK_BASE5 = '5f1d09' # rgb( 95 29 9) - hsl( 14° 83% 20%) - mouth
|
90
|
+
|
91
|
+
HUMAN_DARKER_BASE1 = '713f1d' # rgb(113 63 29) - hsl( 24° 59% 28%)
|
92
|
+
HUMAN_DARKER_BASE2 = '723709' # rgb(114 55 9) - hsl( 26° 85% 24%) - eyes
|
93
|
+
HUMAN_DARKER_BASE3 = '562600' # rgb( 86 38 0) - hsl( 27° 100% 17%) - eyes
|
94
|
+
HUMAN_DARKER_BASE4 = '8b532c' # rgb(139 83 44) - hsl( 25° 52% 36%)
|
95
|
+
HUMAN_DARKER_BASE5 = '4a1201' # rgb( 74 18 1) - hsl( 14° 97% 15%) - mouth
|
96
|
+
|
97
|
+
|
98
|
+
HUMAN_COLORS_LIGHT = [ ## todo/check: change to HUMAN_LIGHT_COLORS???
|
99
|
+
'000000', # color 1 - BLACK
|
100
|
+
HUMAN_LIGHT_BASE3, # color 2 - BASE 3 (DARKEST) - eyes
|
101
|
+
HUMAN_LIGHT_BASE2, # color 3 - BASE 2 (DARKER) - eyes
|
102
|
+
HUMAN_LIGHT_BASE1, # color 4 - BASE 1
|
103
|
+
HUMAN_LIGHT_BASE4, # color 5 - BASE 4
|
104
|
+
HUMAN_LIGHT_BASE5, # color 6 - BASE 5 - mouth (femaly only)
|
105
|
+
]
|
106
|
+
|
107
|
+
HUMAN_COLORS_LIGHTER = [ ## todo/check: change to HUMAN_LIGHTER_COLORS?? or add alias - why? why not?
|
108
|
+
'000000', # color 1 - BLACK
|
109
|
+
HUMAN_LIGHTER_BASE3,
|
110
|
+
HUMAN_LIGHTER_BASE2,
|
111
|
+
HUMAN_LIGHTER_BASE1,
|
112
|
+
HUMAN_LIGHTER_BASE4,
|
113
|
+
HUMAN_LIGHTER_BASE5,
|
114
|
+
]
|
115
|
+
|
116
|
+
HUMAN_COLORS_DARK = [
|
117
|
+
'000000', # color 1 - BLACK
|
118
|
+
HUMAN_DARK_BASE3,
|
119
|
+
HUMAN_DARK_BASE2,
|
120
|
+
HUMAN_DARK_BASE1,
|
121
|
+
HUMAN_DARK_BASE4,
|
122
|
+
HUMAN_DARK_BASE5,
|
123
|
+
]
|
124
|
+
|
125
|
+
HUMAN_COLORS_DARKER = [
|
126
|
+
'000000', # color 1 - BLACK
|
127
|
+
HUMAN_DARKER_BASE3,
|
128
|
+
HUMAN_DARKER_BASE2,
|
129
|
+
HUMAN_DARKER_BASE1,
|
130
|
+
HUMAN_DARKER_BASE4,
|
131
|
+
HUMAN_DARKER_BASE5,
|
132
|
+
]
|
133
|
+
|
134
|
+
|
135
|
+
HUMAN_COLORS = {
|
136
|
+
'light' => HUMAN_COLORS_LIGHT,
|
137
|
+
'lighter' => HUMAN_COLORS_LIGHTER,
|
138
|
+
'dark' => HUMAN_COLORS_DARK,
|
139
|
+
'darker' => HUMAN_COLORS_DARKER,
|
140
|
+
}
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
### todo/check:
|
145
|
+
## use a different name other than the "generic" COLORS - why? why not?
|
146
|
+
|
147
|
+
COLORS = {
|
148
|
+
## original series
|
149
|
+
'human' => HUMAN_COLORS,
|
150
|
+
'zombie' => ZOMBIE_COLORS,
|
151
|
+
'ape' => APE_COLORS,
|
152
|
+
'alien' => ALIEN_COLORS,
|
153
|
+
## more series
|
154
|
+
'vampire' => VAMPIRE_COLORS,
|
155
|
+
'mummy' => MUMMY_COLORS,
|
156
|
+
'orc' => ORC_COLORS,
|
157
|
+
'skeleton' => SKELETON_COLORS,
|
158
|
+
'demon' => DEMON_COLORS,
|
159
|
+
'robot' => ROBOT_COLORS,
|
160
|
+
}
|
161
|
+
|
162
|
+
|
@@ -1,38 +1,38 @@
|
|
1
|
-
module
|
2
|
-
## note: was Image::Composite
|
3
|
-
class ImageComposite < Pixelart::ImageComposite
|
4
|
-
|
5
|
-
PUNK_HASH = 'ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b'
|
6
|
-
|
7
|
-
def self.sha256( data )
|
8
|
-
## todo/check: or just use Digest::SHA256.hexdigest - why? why not?
|
9
|
-
Digest::SHA256.digest( data ).unpack( 'H*' )[0]
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
PUNK_HEIGHT = 24
|
14
|
-
PUNK_WIDTH = 24
|
15
|
-
|
16
|
-
def self.read( path='./punks.png', width: PUNK_WIDTH, height: PUNK_HEIGHT )
|
17
|
-
data = File.open( path, 'rb' ) { |f| f.read }
|
18
|
-
|
19
|
-
hexdigest = sha256( data ) ## check sha256 checksum
|
20
|
-
if hexdigest == PUNK_HASH
|
21
|
-
puts " >#{hexdigest}< SHA256 hash matching"
|
22
|
-
puts " ✓ True Official Genuine
|
23
|
-
else
|
24
|
-
puts " ✓ True Official Genuine Yes, You Can!
|
25
|
-
end
|
26
|
-
|
27
|
-
img = ChunkyPNG::Image.from_blob( data )
|
28
|
-
new( img, width: width, height: height )
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
def initialize( *args, width: PUNK_WIDTH,
|
33
|
-
height: PUNK_HEIGHT )
|
34
|
-
super
|
35
|
-
end
|
36
|
-
|
37
|
-
end ## class ImageComposite
|
38
|
-
end ## module
|
1
|
+
module Punk
|
2
|
+
## note: was Image::Composite
|
3
|
+
class ImageComposite < Pixelart::ImageComposite
|
4
|
+
|
5
|
+
PUNK_HASH = 'ac39af4793119ee46bbff351d8cb6b5f23da60222126add4268e261199a2921b'
|
6
|
+
|
7
|
+
def self.sha256( data )
|
8
|
+
## todo/check: or just use Digest::SHA256.hexdigest - why? why not?
|
9
|
+
Digest::SHA256.digest( data ).unpack( 'H*' )[0]
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
PUNK_HEIGHT = 24
|
14
|
+
PUNK_WIDTH = 24
|
15
|
+
|
16
|
+
def self.read( path='./punks.png', width: PUNK_WIDTH, height: PUNK_HEIGHT )
|
17
|
+
data = File.open( path, 'rb' ) { |f| f.read }
|
18
|
+
|
19
|
+
hexdigest = sha256( data ) ## check sha256 checksum
|
20
|
+
if hexdigest == PUNK_HASH
|
21
|
+
puts " >#{hexdigest}< SHA256 hash matching"
|
22
|
+
puts " ✓ True Official Genuine Matt & John's® Punks verified"
|
23
|
+
else
|
24
|
+
puts " ✓ True Official Genuine Yes, You Can! Punk's Not Dead® verified"
|
25
|
+
end
|
26
|
+
|
27
|
+
img = ChunkyPNG::Image.from_blob( data )
|
28
|
+
new( img, width: width, height: height )
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def initialize( *args, width: PUNK_WIDTH,
|
33
|
+
height: PUNK_HEIGHT )
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
end ## class ImageComposite
|
38
|
+
end ## module Punk
|