pixelart 1.2.2 → 1.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -3
- data/Manifest.txt +5 -0
- data/README.md +290 -290
- data/Rakefile +32 -32
- data/lib/pixelart/base.rb +93 -84
- data/lib/pixelart/blur.rb +19 -19
- data/lib/pixelart/circle.rb +46 -0
- data/lib/pixelart/color.rb +131 -131
- data/lib/pixelart/composite.rb +154 -154
- data/lib/pixelart/generator.rb +199 -0
- data/lib/pixelart/gradient.rb +106 -106
- data/lib/pixelart/image.rb +283 -272
- data/lib/pixelart/led.rb +37 -37
- data/lib/pixelart/misc.rb +66 -66
- data/lib/pixelart/palette.rb +72 -72
- data/lib/pixelart/pixelator.rb +165 -165
- data/lib/pixelart/sample.rb +120 -0
- data/lib/pixelart/silhouette.rb +35 -35
- data/lib/pixelart/sketch.rb +69 -69
- data/lib/pixelart/spots.rb +146 -146
- data/lib/pixelart/stripes.rb +116 -0
- data/lib/pixelart/transparent.rb +60 -60
- data/lib/pixelart/ukraine.rb +20 -0
- data/lib/pixelart/vector.rb +163 -163
- data/lib/pixelart/version.rb +22 -22
- data/lib/pixelart.rb +12 -12
- metadata +11 -6
data/Rakefile
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
require 'hoe'
|
2
|
-
require './lib/pixelart/version.rb'
|
3
|
-
|
4
|
-
Hoe.spec 'pixelart' do
|
5
|
-
|
6
|
-
self.version = Pixelart::VERSION
|
7
|
-
|
8
|
-
self.summary = "pixelart - mint your own pixel art images off chain using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes"
|
9
|
-
self.description = summary
|
10
|
-
|
11
|
-
self.urls = { home: 'https://github.com/pixelartexchange/
|
12
|
-
|
13
|
-
self.author = 'Gerald Bauer'
|
14
|
-
self.email = 'wwwmake@googlegroups.com'
|
15
|
-
|
16
|
-
# switch extension to .markdown for gihub formatting
|
17
|
-
self.readme_file = 'README.md'
|
18
|
-
self.history_file = 'CHANGELOG.md'
|
19
|
-
|
20
|
-
self.extra_deps = [
|
21
|
-
['chunky_png'],
|
22
|
-
['mini_magick'],
|
23
|
-
['csvreader'],
|
24
|
-
]
|
25
|
-
|
26
|
-
self.licenses = ['Public Domain']
|
27
|
-
|
28
|
-
self.spec_extras = {
|
29
|
-
required_ruby_version: '>= 2.3'
|
30
|
-
}
|
31
|
-
|
32
|
-
end
|
1
|
+
require 'hoe'
|
2
|
+
require './lib/pixelart/version.rb'
|
3
|
+
|
4
|
+
Hoe.spec 'pixelart' do
|
5
|
+
|
6
|
+
self.version = Pixelart::VERSION
|
7
|
+
|
8
|
+
self.summary = "pixelart - mint your own pixel art images off chain using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes"
|
9
|
+
self.description = summary
|
10
|
+
|
11
|
+
self.urls = { home: 'https://github.com/pixelartexchange/pixelart' }
|
12
|
+
|
13
|
+
self.author = 'Gerald Bauer'
|
14
|
+
self.email = 'wwwmake@googlegroups.com'
|
15
|
+
|
16
|
+
# switch extension to .markdown for gihub formatting
|
17
|
+
self.readme_file = 'README.md'
|
18
|
+
self.history_file = 'CHANGELOG.md'
|
19
|
+
|
20
|
+
self.extra_deps = [
|
21
|
+
['chunky_png'],
|
22
|
+
['mini_magick'],
|
23
|
+
['csvreader'],
|
24
|
+
]
|
25
|
+
|
26
|
+
self.licenses = ['Public Domain']
|
27
|
+
|
28
|
+
self.spec_extras = {
|
29
|
+
required_ruby_version: '>= 2.3'
|
30
|
+
}
|
31
|
+
|
32
|
+
end
|
data/lib/pixelart/base.rb
CHANGED
@@ -1,84 +1,93 @@
|
|
1
|
-
###############
|
2
|
-
# 3rd party
|
3
|
-
require 'chunky_png'
|
4
|
-
|
5
|
-
# optional
|
6
|
-
# note: requires installed imagemagick command line installed for usage
|
7
|
-
require 'mini_magick'
|
8
|
-
|
9
|
-
|
10
|
-
# bonus / prologue / convenience 3rd party
|
11
|
-
require 'csvreader'
|
12
|
-
|
13
|
-
|
14
|
-
## stdlib
|
15
|
-
require 'pp'
|
16
|
-
require 'time'
|
17
|
-
require 'date'
|
18
|
-
require 'fileutils'
|
19
|
-
|
20
|
-
require 'json'
|
21
|
-
require 'yaml'
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
## our own code
|
27
|
-
require 'pixelart/version' # note: let version always go first
|
28
|
-
require 'pixelart/color'
|
29
|
-
require 'pixelart/gradient'
|
30
|
-
require 'pixelart/palette'
|
31
|
-
require 'pixelart/image'
|
32
|
-
require 'pixelart/composite'
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
require 'pixelart/
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
require 'pixelart/
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
1
|
+
###############
|
2
|
+
# 3rd party
|
3
|
+
require 'chunky_png'
|
4
|
+
|
5
|
+
# optional
|
6
|
+
# note: requires installed imagemagick command line installed for usage
|
7
|
+
require 'mini_magick'
|
8
|
+
|
9
|
+
|
10
|
+
# bonus / prologue / convenience 3rd party
|
11
|
+
require 'csvreader'
|
12
|
+
|
13
|
+
|
14
|
+
## stdlib
|
15
|
+
require 'pp'
|
16
|
+
require 'time'
|
17
|
+
require 'date'
|
18
|
+
require 'fileutils'
|
19
|
+
|
20
|
+
require 'json'
|
21
|
+
require 'yaml'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
## our own code
|
27
|
+
require 'pixelart/version' # note: let version always go first
|
28
|
+
require 'pixelart/color'
|
29
|
+
require 'pixelart/gradient'
|
30
|
+
require 'pixelart/palette'
|
31
|
+
require 'pixelart/image'
|
32
|
+
require 'pixelart/composite'
|
33
|
+
|
34
|
+
require 'pixelart/sample' ## (down)sample / pixelate
|
35
|
+
|
36
|
+
|
37
|
+
require 'pixelart/pixelator'
|
38
|
+
|
39
|
+
require 'pixelart/misc' ## misc helpers
|
40
|
+
require 'pixelart/stripes'
|
41
|
+
|
42
|
+
|
43
|
+
require 'pixelart/generator' ## generate images from text via spritesheets
|
44
|
+
|
45
|
+
|
46
|
+
#########################
|
47
|
+
# (special) effects / filters / etc
|
48
|
+
require 'pixelart/circle'
|
49
|
+
require 'pixelart/led'
|
50
|
+
require 'pixelart/sketch'
|
51
|
+
require 'pixelart/transparent'
|
52
|
+
require 'pixelart/silhouette'
|
53
|
+
require 'pixelart/ukraine'
|
54
|
+
|
55
|
+
|
56
|
+
## (special) effects / filters that require imagemagick
|
57
|
+
|
58
|
+
|
59
|
+
## todo/check - use a config block or such - why? why not?
|
60
|
+
module Pixelart
|
61
|
+
MAGICK_SCRIPT = './tmp/magick_script.txt'
|
62
|
+
MAGICK_INPUT = './tmp/magick_input.png'
|
63
|
+
MAGICK_OUTPUT = './tmp/magick_output.png'
|
64
|
+
end
|
65
|
+
|
66
|
+
require 'pixelart/vector' ## vector graphics helpers
|
67
|
+
|
68
|
+
|
69
|
+
require 'pixelart/spots'
|
70
|
+
require 'pixelart/blur'
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
##########
|
79
|
+
# add some spelling convenience variants
|
80
|
+
PixelArt = Pixelart
|
81
|
+
|
82
|
+
module Pixelart
|
83
|
+
Palette256 = Palette8Bit = Palette8bit
|
84
|
+
|
85
|
+
Palette256Image = Palette8BitImage = Palette8bitImage =
|
86
|
+
ImagePalette256 = ImagePalette8Bit = ImagePalette8bit
|
87
|
+
|
88
|
+
CompositeImage = ImageComposite
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
puts Pixelart.banner # say hello
|
data/lib/pixelart/blur.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
|
-
module Pixelart
|
2
|
-
|
3
|
-
class Image
|
4
|
-
|
5
|
-
def blur( blur=2 )
|
6
|
-
@img.save( MAGICK_INPUT )
|
7
|
-
|
8
|
-
MiniMagick::Tool::Magick.new do |magick|
|
9
|
-
magick << MAGICK_INPUT
|
10
|
-
magick.blur( "#{blur}x#{blur}" )
|
11
|
-
magick << MAGICK_OUTPUT
|
12
|
-
end
|
13
|
-
|
14
|
-
Image.read( MAGICK_OUTPUT )
|
15
|
-
end
|
16
|
-
|
17
|
-
end # class Image
|
18
|
-
end # class Pixelart
|
19
|
-
|
1
|
+
module Pixelart
|
2
|
+
|
3
|
+
class Image
|
4
|
+
|
5
|
+
def blur( blur=2 )
|
6
|
+
@img.save( MAGICK_INPUT )
|
7
|
+
|
8
|
+
MiniMagick::Tool::Magick.new do |magick|
|
9
|
+
magick << MAGICK_INPUT
|
10
|
+
magick.blur( "#{blur}x#{blur}" )
|
11
|
+
magick << MAGICK_OUTPUT
|
12
|
+
end
|
13
|
+
|
14
|
+
Image.read( MAGICK_OUTPUT )
|
15
|
+
end
|
16
|
+
|
17
|
+
end # class Image
|
18
|
+
end # class Pixelart
|
19
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
###
|
2
|
+
#
|
3
|
+
# add more circle aliases
|
4
|
+
# e.g. circular / round or such - why? why not?
|
5
|
+
|
6
|
+
|
7
|
+
module Pixelart
|
8
|
+
|
9
|
+
class Image
|
10
|
+
def circle
|
11
|
+
### for radius use min of width / height
|
12
|
+
r = [@img.width, @img.height].min / 2
|
13
|
+
|
14
|
+
center_x = width / 2
|
15
|
+
center_y = height / 2
|
16
|
+
|
17
|
+
################
|
18
|
+
# try with 96x96
|
19
|
+
# center_x: 96 / 2 = 48
|
20
|
+
# center_y: 96 / 2 = 48
|
21
|
+
#
|
22
|
+
# r: 96 / 2 = 48
|
23
|
+
|
24
|
+
img = Image.new( @img.width, @img.height )
|
25
|
+
|
26
|
+
@img.width.times do |x|
|
27
|
+
@img.height.times do |y|
|
28
|
+
|
29
|
+
## change to float calcuation (instead of ints) - why? why not?
|
30
|
+
xx, yy, rr = x - center_x,
|
31
|
+
y - center_y,
|
32
|
+
r
|
33
|
+
|
34
|
+
img[ x, y] = if xx*xx+yy*yy < rr*rr
|
35
|
+
@img[ x, y ]
|
36
|
+
else
|
37
|
+
0 ## transparent - alpha(0)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
img
|
43
|
+
end
|
44
|
+
end # class Image
|
45
|
+
|
46
|
+
end # module Pixelart
|
data/lib/pixelart/color.rb
CHANGED
@@ -1,131 +1,131 @@
|
|
1
|
-
module Pixelart
|
2
|
-
|
3
|
-
|
4
|
-
class Color
|
5
|
-
TRANSPARENT = 0 # rgba( 0, 0, 0, 0)
|
6
|
-
BLACK = 0xff # rgba( 0, 0, 0,255)
|
7
|
-
WHITE = 0xffffffff # rgba(255,255,255,255)
|
8
|
-
|
9
|
-
|
10
|
-
def self.parse( color )
|
11
|
-
if color.is_a?( Integer ) ## e.g. assumes ChunkyPNG::Color.rgb() or such
|
12
|
-
color ## pass through as is 1:1
|
13
|
-
elsif color.is_a?( Array ) ## assume array of hsl(a) e. g. [180, 0.86, 0.88]
|
14
|
-
from_hsl( *color )
|
15
|
-
elsif color.is_a?( String )
|
16
|
-
if color.downcase == 'transparent' ## special case for builtin colors
|
17
|
-
TRANSPARENT
|
18
|
-
else
|
19
|
-
## note: return an Integer !!! (not a Color class or such!!! )
|
20
|
-
from_hex( color )
|
21
|
-
end
|
22
|
-
else
|
23
|
-
raise ArgumentError, "unknown color format; cannot parse - expected rgb hex string e.g. d3d3d3"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.from_hex( hex )
|
28
|
-
## Creates a color by converting it from a string in hex notation.
|
29
|
-
##
|
30
|
-
## It supports colors with (#rrggbbaa) or without (#rrggbb)
|
31
|
-
## alpha channel as well as the 3-digit short format (#rgb)
|
32
|
-
## for those without. Color strings may include
|
33
|
-
## the prefix "0x" or "#"".
|
34
|
-
ChunkyPNG::Color.from_hex( hex )
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.from_hsl( hue, saturation, lightness, alpha=255)
|
38
|
-
ChunkyPNG::Color.from_hsl( hue,
|
39
|
-
saturation,
|
40
|
-
lightness,
|
41
|
-
alpha )
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
def self.to_hex( color, include_alpha: true )
|
46
|
-
ChunkyPNG::Color.to_hex( color, include_alpha )
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.to_hsl( color, include_alpha: true )
|
50
|
-
# Returns an array with the separate HSL components of a color.
|
51
|
-
ChunkyPNG::Color.to_hsl( color, include_alpha )
|
52
|
-
end
|
53
|
-
|
54
|
-
def self.r( color ) ChunkyPNG::Color.r( color ); end
|
55
|
-
def self.g( color ) ChunkyPNG::Color.g( color ); end
|
56
|
-
def self.b( color ) ChunkyPNG::Color.b( color ); end
|
57
|
-
|
58
|
-
def self.rgb( r, g, b ) ChunkyPNG::Color.rgb( r, g, b); end
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
## known built-in color names
|
63
|
-
def self.build_names
|
64
|
-
names = {
|
65
|
-
'#00000000' => 'TRANSPARENT',
|
66
|
-
'#000000ff' => 'BLACK',
|
67
|
-
'#ffffffff' => 'WHITE',
|
68
|
-
}
|
69
|
-
|
70
|
-
## auto-add grayscale 1 to 254
|
71
|
-
(1..254).each do |n|
|
72
|
-
hex = "#" + ('%02x' % n)*3
|
73
|
-
hex << "ff" ## add alpha channel (255)
|
74
|
-
names[ hex ] = "8-BIT GRAYSCALE ##{n}"
|
75
|
-
end
|
76
|
-
|
77
|
-
names
|
78
|
-
end
|
79
|
-
|
80
|
-
NAMES = build_names
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
def self.format( color )
|
85
|
-
rgb = [r(color),
|
86
|
-
g(color),
|
87
|
-
b(color)]
|
88
|
-
|
89
|
-
# rgb in hex (string format)
|
90
|
-
# note: do NOT include alpha channel for now - why? why not?
|
91
|
-
hex = "#" + rgb.map{|num| '%02x' % num }.join
|
92
|
-
|
93
|
-
hsl = to_hsl( color )
|
94
|
-
## get alpha channel (transparency) for hsla
|
95
|
-
alpha = hsl[3]
|
96
|
-
|
97
|
-
|
98
|
-
buf = ''
|
99
|
-
buf << hex
|
100
|
-
buf << " / "
|
101
|
-
buf << "rgb("
|
102
|
-
buf << "%3d " % rgb[0]
|
103
|
-
buf << "%3d " % rgb[1]
|
104
|
-
buf << "%3d)" % rgb[2]
|
105
|
-
buf << " - "
|
106
|
-
buf << "hsl("
|
107
|
-
buf << "%3d° " % (hsl[0] % 360)
|
108
|
-
buf << "%3d%% " % (hsl[1]*100+0.5).to_i
|
109
|
-
buf << "%3d%%)" % (hsl[2]*100+0.5).to_i
|
110
|
-
|
111
|
-
if alpha != 255
|
112
|
-
buf << " - α(%3d%%)" % (alpha*100/255+0.5).to_i
|
113
|
-
else
|
114
|
-
buf << " " ## add empty for 255 (full opacity)
|
115
|
-
end
|
116
|
-
|
117
|
-
## note: add alpha channel to hex
|
118
|
-
alpha_hex = '%02x' % alpha
|
119
|
-
name = NAMES[ hex+alpha_hex ]
|
120
|
-
buf << " - #{name}" if name
|
121
|
-
|
122
|
-
buf
|
123
|
-
end
|
124
|
-
class << self
|
125
|
-
alias_method :fmt, :format
|
126
|
-
end
|
127
|
-
|
128
|
-
end # class Color
|
129
|
-
end # module Pixelart
|
130
|
-
|
131
|
-
|
1
|
+
module Pixelart
|
2
|
+
|
3
|
+
|
4
|
+
class Color
|
5
|
+
TRANSPARENT = 0 # rgba( 0, 0, 0, 0)
|
6
|
+
BLACK = 0xff # rgba( 0, 0, 0,255)
|
7
|
+
WHITE = 0xffffffff # rgba(255,255,255,255)
|
8
|
+
|
9
|
+
|
10
|
+
def self.parse( color )
|
11
|
+
if color.is_a?( Integer ) ## e.g. assumes ChunkyPNG::Color.rgb() or such
|
12
|
+
color ## pass through as is 1:1
|
13
|
+
elsif color.is_a?( Array ) ## assume array of hsl(a) e. g. [180, 0.86, 0.88]
|
14
|
+
from_hsl( *color )
|
15
|
+
elsif color.is_a?( String )
|
16
|
+
if color.downcase == 'transparent' ## special case for builtin colors
|
17
|
+
TRANSPARENT
|
18
|
+
else
|
19
|
+
## note: return an Integer !!! (not a Color class or such!!! )
|
20
|
+
from_hex( color )
|
21
|
+
end
|
22
|
+
else
|
23
|
+
raise ArgumentError, "unknown color format; cannot parse - expected rgb hex string e.g. d3d3d3"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.from_hex( hex )
|
28
|
+
## Creates a color by converting it from a string in hex notation.
|
29
|
+
##
|
30
|
+
## It supports colors with (#rrggbbaa) or without (#rrggbb)
|
31
|
+
## alpha channel as well as the 3-digit short format (#rgb)
|
32
|
+
## for those without. Color strings may include
|
33
|
+
## the prefix "0x" or "#"".
|
34
|
+
ChunkyPNG::Color.from_hex( hex )
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.from_hsl( hue, saturation, lightness, alpha=255)
|
38
|
+
ChunkyPNG::Color.from_hsl( hue,
|
39
|
+
saturation,
|
40
|
+
lightness,
|
41
|
+
alpha )
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def self.to_hex( color, include_alpha: true )
|
46
|
+
ChunkyPNG::Color.to_hex( color, include_alpha )
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.to_hsl( color, include_alpha: true )
|
50
|
+
# Returns an array with the separate HSL components of a color.
|
51
|
+
ChunkyPNG::Color.to_hsl( color, include_alpha )
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.r( color ) ChunkyPNG::Color.r( color ); end
|
55
|
+
def self.g( color ) ChunkyPNG::Color.g( color ); end
|
56
|
+
def self.b( color ) ChunkyPNG::Color.b( color ); end
|
57
|
+
|
58
|
+
def self.rgb( r, g, b ) ChunkyPNG::Color.rgb( r, g, b); end
|
59
|
+
|
60
|
+
|
61
|
+
|
62
|
+
## known built-in color names
|
63
|
+
def self.build_names
|
64
|
+
names = {
|
65
|
+
'#00000000' => 'TRANSPARENT',
|
66
|
+
'#000000ff' => 'BLACK',
|
67
|
+
'#ffffffff' => 'WHITE',
|
68
|
+
}
|
69
|
+
|
70
|
+
## auto-add grayscale 1 to 254
|
71
|
+
(1..254).each do |n|
|
72
|
+
hex = "#" + ('%02x' % n)*3
|
73
|
+
hex << "ff" ## add alpha channel (255)
|
74
|
+
names[ hex ] = "8-BIT GRAYSCALE ##{n}"
|
75
|
+
end
|
76
|
+
|
77
|
+
names
|
78
|
+
end
|
79
|
+
|
80
|
+
NAMES = build_names
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
def self.format( color )
|
85
|
+
rgb = [r(color),
|
86
|
+
g(color),
|
87
|
+
b(color)]
|
88
|
+
|
89
|
+
# rgb in hex (string format)
|
90
|
+
# note: do NOT include alpha channel for now - why? why not?
|
91
|
+
hex = "#" + rgb.map{|num| '%02x' % num }.join
|
92
|
+
|
93
|
+
hsl = to_hsl( color )
|
94
|
+
## get alpha channel (transparency) for hsla
|
95
|
+
alpha = hsl[3]
|
96
|
+
|
97
|
+
|
98
|
+
buf = ''
|
99
|
+
buf << hex
|
100
|
+
buf << " / "
|
101
|
+
buf << "rgb("
|
102
|
+
buf << "%3d " % rgb[0]
|
103
|
+
buf << "%3d " % rgb[1]
|
104
|
+
buf << "%3d)" % rgb[2]
|
105
|
+
buf << " - "
|
106
|
+
buf << "hsl("
|
107
|
+
buf << "%3d° " % (hsl[0] % 360)
|
108
|
+
buf << "%3d%% " % (hsl[1]*100+0.5).to_i
|
109
|
+
buf << "%3d%%)" % (hsl[2]*100+0.5).to_i
|
110
|
+
|
111
|
+
if alpha != 255
|
112
|
+
buf << " - α(%3d%%)" % (alpha*100/255+0.5).to_i
|
113
|
+
else
|
114
|
+
buf << " " ## add empty for 255 (full opacity)
|
115
|
+
end
|
116
|
+
|
117
|
+
## note: add alpha channel to hex
|
118
|
+
alpha_hex = '%02x' % alpha
|
119
|
+
name = NAMES[ hex+alpha_hex ]
|
120
|
+
buf << " - #{name}" if name
|
121
|
+
|
122
|
+
buf
|
123
|
+
end
|
124
|
+
class << self
|
125
|
+
alias_method :fmt, :format
|
126
|
+
end
|
127
|
+
|
128
|
+
end # class Color
|
129
|
+
end # module Pixelart
|
130
|
+
|
131
|
+
|