pixelart 1.3.6 → 1.3.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92c0d22468eb46c7120b5cdfeeca63f0d4049bdfc055037186e05690e81f3404
4
- data.tar.gz: 1d5cb926059539d9bce964243a099307e1c03de5be9de7c5285bc76d54acb7cb
3
+ metadata.gz: 931c4aa26d5a0594b4aec85f532d16e93d3dd505f4d2f9729b24e3fd45c662c4
4
+ data.tar.gz: 5dc8936fc9a0f76b05cf4209ad69ebeba87f25bd3c0290cad59e961760aa5782
5
5
  SHA512:
6
- metadata.gz: 17a632b18859b6c341e5d80ecc91bdacff31037c3067efcda244d722515e70f8689613dbc205ed0e43300fdb5e5e36da70e079287adf7b4775041ca6ed3d1653
7
- data.tar.gz: 8fe33b806a59f408ce6666de365e13023175f87314b832cad3f196dc96f4c83aee37013ab554e30e015e2df621047a28091937506b03df1f09deef10773dc5e3
6
+ metadata.gz: 3189094ecb75f30d1ccd52bafc83b6ece3319b0b5c4f769ab02110212b5674adc59a816dc2abfa8be3d9a6a344bd253471677d5802391325b681987eb9d5ece0
7
+ data.tar.gz: a1e6e2ea6c25ac1ed7f2542ff8039a8ac1b5232001539611a151302959563e623d879e9c6590aa4cc1468d7716eb7ffaa8faeeed9360589570664a94f512aa48
data/Manifest.txt CHANGED
@@ -10,8 +10,10 @@ lib/pixelart/composite.rb
10
10
  lib/pixelart/convert.rb
11
11
  lib/pixelart/generator.rb
12
12
  lib/pixelart/image.rb
13
+ lib/pixelart/invert.rb
13
14
  lib/pixelart/led.rb
14
15
  lib/pixelart/misc.rb
16
+ lib/pixelart/orc721/generator.rb
15
17
  lib/pixelart/pixelator.rb
16
18
  lib/pixelart/sample.rb
17
19
  lib/pixelart/silhouette.rb
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Pixel Art
2
2
 
3
- 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
3
+ pixelart - yes, you can! generate your own pixel art images (off-blockchain) using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes
4
4
 
5
5
 
6
- * home :: [github.com/pixelartexchange/pixelart](https://github.com/pixelartexchange/pixelart)
7
- * bugs :: [github.com/pixelartexchange/pixelart/issues](https://github.com/pixelartexchange/pixelart/issues)
6
+ * home :: [github.com/learnpixelart/pixelart](https://github.com/learnpixelart/pixelart)
7
+ * bugs :: [github.com/learnpixelart/pixelart/issues](https://github.com/learnpixelart/pixelart/issues)
8
8
  * gem :: [rubygems.org/gems/pixelart](https://rubygems.org/gems/pixelart)
9
9
  * rdoc :: [rubydoc.info/gems/pixelart](http://rubydoc.info/gems/pixelart)
10
10
 
@@ -71,8 +71,8 @@ img3x.save( './i/mooncat_white-3x.png' )
71
71
 
72
72
  Voila!
73
73
 
74
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/mooncat_white.png)
75
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/mooncat_white-3x.png)
74
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/mooncat_white.png)
75
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/mooncat_white-3x.png)
76
76
 
77
77
 
78
78
 
@@ -100,8 +100,8 @@ img3x.save( './i/mooncat_black-3x.png' )
100
100
 
101
101
  Voila! Black is the new White!
102
102
 
103
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/mooncat_black.png)
104
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/mooncat_black-3x.png)
103
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/mooncat_black.png)
104
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/mooncat_black-3x.png)
105
105
 
106
106
 
107
107
 
@@ -227,8 +227,8 @@ img5x.save( './i/vader5x.png' )
227
227
 
228
228
  Voila!
229
229
 
230
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/vader.png)
231
- ![](https://github.com/pixelartexchange/pixelart/raw/master/pixelart/i/vader5x.png)
230
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/vader.png)
231
+ ![](https://github.com/learnpixelart/pixelart/raw/master/pixelart/i/vader5x.png)
232
232
 
233
233
 
234
234
 
@@ -291,6 +291,9 @@ Use it as you please with no restrictions whatsoever.
291
291
 
292
292
 
293
293
 
294
+
294
295
  ## Questions? Comments?
295
296
 
296
- Post them on the [D.I.Y. Punk (Pixel) Art reddit](https://old.reddit.com/r/DIYPunkArt). Thanks.
297
+ Post them over at the [Help & Support](https://github.com/geraldb/help) page. Thanks.
298
+
299
+
data/Rakefile CHANGED
@@ -5,13 +5,13 @@ Hoe.spec 'pixelart' do
5
5
 
6
6
  self.version = Pixelart::VERSION
7
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"
8
+ self.summary = "pixelart - yes, you can! generate your own pixel art images (off-blockchain) using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes"
9
9
  self.description = summary
10
10
 
11
- self.urls = { home: 'https://github.com/pixelartexchange/pixelart' }
11
+ self.urls = { home: 'https://github.com/learnpixelart/pixelart' }
12
12
 
13
13
  self.author = 'Gerald Bauer'
14
- self.email = 'wwwmake@googlegroups.com'
14
+ self.email = 'gerald.bauer@gmail.com'
15
15
 
16
16
  # switch extension to .markdown for gihub formatting
17
17
  self.readme_file = 'README.md'
data/lib/pixelart/base.rb CHANGED
@@ -42,6 +42,7 @@ require 'pixelart/led'
42
42
  require 'pixelart/sketch'
43
43
  require 'pixelart/transparent'
44
44
  require 'pixelart/silhouette'
45
+ require 'pixelart/invert'
45
46
  require 'pixelart/ukraine'
46
47
 
47
48
 
@@ -69,4 +70,9 @@ require 'pixelart/convert'
69
70
 
70
71
 
71
72
 
73
+ ####
74
+ # add orc-721 - why? why not?
75
+ require 'pixelart/orc721/generator'
76
+
77
+
72
78
  puts Pixelart.banner # say hello
@@ -10,7 +10,7 @@ class ImageComposite < Image # check: (re)name to Collage, Sheet, Sprites, or s
10
10
  def self.read( path, width: TILE_WIDTH, height: TILE_WIDTH ) ## convenience helper
11
11
  img = ChunkyPNG::Image.from_file( path )
12
12
  new( img, width: width,
13
- height: width )
13
+ height: height )
14
14
  end
15
15
 
16
16
 
@@ -36,15 +36,18 @@ def self.convert( dir, from: 'jpg',
36
36
  system( cmd )
37
37
 
38
38
  if from == 'gif'
39
- ## assume multi-images for gif
39
+ ## check for multi-images for gif
40
40
  ## save image-0.png to image.png
41
41
  path0 = "#{outdir}/#{basename}-0.#{to}"
42
42
  path = "#{outdir}/#{basename}.#{to}"
43
43
 
44
- puts " saving #{path0} to #{path}..."
44
+ ## note: image-0.png only exists (gets generated) for multi-images
45
+ if File.exist?( path0 )
46
+ puts " saving #{path0} to #{path}..."
45
47
 
46
- blob = File.open( path0, 'rb' ) { |f| f.read }
47
- File.open( path, 'wb' ) { |f| f.write( blob ) }
48
+ blob = File.open( path0, 'rb' ) { |f| f.read }
49
+ File.open( path, 'wb' ) { |f| f.write( blob ) }
50
+ end
48
51
  end
49
52
  end
50
53
  end
@@ -51,7 +51,9 @@ CHARS = '.@xo^~%*+=:' ## todo/check: rename to default chars or such? why? w
51
51
 
52
52
  ## todo/check: support default chars encoding auto-of-the-box always
53
53
  ## or require user-defined chars to be passed in - why? why not?
54
- def self.parse( pixels, colors:, chars: CHARS )
54
+ def self.parse( pixels, colors:,
55
+ background: Color::TRANSPARENT,
56
+ chars: CHARS )
55
57
  has_keys = colors.is_a?(Hash) ## check if passed-in user-defined keys (via hash table)?
56
58
 
57
59
  colors = parse_colors( colors )
@@ -60,6 +62,8 @@ def self.parse( pixels, colors:, chars: CHARS )
60
62
  width = pixels.reduce(1) {|width,row| row.size > width ? row.size : width }
61
63
  height = pixels.size
62
64
 
65
+ background = Color.parse( background ) unless background.is_a?( Integer )
66
+
63
67
  img = new( width, height )
64
68
 
65
69
  pixels.each_with_index do |row,y|
@@ -77,7 +81,13 @@ def self.parse( pixels, colors:, chars: CHARS )
77
81
  end
78
82
  end
79
83
 
80
- img[x,y] = pixel
84
+
85
+ img[x,y] = if background && background != Color::TRANSPARENT &&
86
+ pixel == Color::TRANSPARENT
87
+ background ## note: auto-fill transparent with background color
88
+ else
89
+ pixel
90
+ end
81
91
  end # each row
82
92
  end # each data
83
93
 
@@ -311,17 +321,28 @@ def image() @img; end
311
321
  ######
312
322
  # helpers
313
323
  def self.parse_pixels( pixels )
314
- data = []
315
- pixels.each_line do |line|
316
- line = line.strip
317
- next if line.start_with?( '#' ) || line.empty? ## note: allow comments and empty lines
318
-
319
- ## note: allow multiple spaces or tabs to separate pixel codes
320
- ## e.g. o o o o o o o o o o o o dg lg w w lg w lg lg dg dg w w lg dg o o o o o o o o o o o
321
- ## or
322
- data << line.split( /[ \t]+/)
323
- end
324
- data
324
+ if pixels.is_a?( Array ) ## assume array of string (lines)
325
+ data = []
326
+ pixels.each do |line|
327
+ ## convert (string) line into indidual chars
328
+ data << line.each_char.reduce( [] ) { |mem, c| mem << c; mem }
329
+ end
330
+ data
331
+ else ## assume it's a (multi-line) string (with newlines)
332
+ ## assert and throw ArgumentError if not? - why? why not?
333
+ data = []
334
+ pixels.each_line do |line|
335
+ line = line.strip
336
+ next if line.start_with?( '#' ) || line.empty? ## note: allow comments and empty lines
337
+
338
+ ## note: allow multiple spaces or tabs
339
+ ## to separate pixel codes
340
+ ## e.g. o o o o o o o o o o o o dg lg w w lg w lg lg dg dg w w lg dg o o o o o o o o o o o
341
+ ## or
342
+ data << line.split( /[ \t]+/)
343
+ end
344
+ data
345
+ end
325
346
  end
326
347
 
327
348
 
@@ -0,0 +1,40 @@
1
+ module Pixelart
2
+
3
+
4
+ ## todo/check:
5
+ ## use a different name for invert
6
+ ## - why not - negate ???
7
+
8
+
9
+ class Image
10
+ ## note: invert will only invert r/g/b - and NOT the a(lpha) channel
11
+ ## the a(lpha) channel get passed on as is (1:1)
12
+ def invert
13
+ img = Image.new( @img.width, @img.height )
14
+
15
+ @img.width.times do |x|
16
+ @img.height.times do |y|
17
+ pixel = @img[x,y]
18
+
19
+ ## note: xor (^) with 0 returns the original value unmodified.
20
+ ## xor (^) with 0xff flips the bits.
21
+ ## that is we are flipping/inverting r, g and b.
22
+ ## and keep the a(lpha) channel as is.
23
+
24
+ ## hack - why? why not?
25
+ ## if transparent e.g. 0x0 than keep as is
26
+ ## do not use 0xffffff00 - makes a difference?
27
+
28
+ img[x,y] = if pixel == Color::TRANSPARENT # transparent (0)
29
+ Color::TRANSPARENT
30
+ else
31
+ pixel ^ 0xffffff00
32
+ end
33
+ end
34
+ end
35
+ img
36
+ end
37
+
38
+ end # class Image
39
+
40
+ end # module Pixelart
@@ -0,0 +1,51 @@
1
+
2
+
3
+ module Orc721
4
+ class Generator
5
+ ###################
6
+ ## convenience setup helper(s)
7
+ def self.read( path, width: 24, height: 24 )
8
+ new( Pixelart::ImageComposite.read( path,
9
+ width: width,
10
+ height: height ))
11
+ end
12
+
13
+
14
+ def initialize( spritesheet )
15
+ ### todo: check for composite image type? - why? why not?
16
+ @spritesheet = spritesheet
17
+ end
18
+
19
+ def _parse( spec )
20
+ ## for delimiter allow for now: - why? why not?
21
+ ## (multiple) space ( )
22
+ ## command or semicolon
23
+ spec.strip.split( %r{[ ,;/_-]+} ).map {|v| v.to_i(10) }
24
+ end
25
+
26
+ def parse( spec )
27
+ ## convenience helper
28
+ ## parses g spec in various (delimited) formats
29
+ g = _parse( spec )
30
+ generate( *g )
31
+ end
32
+
33
+ def generate( *attributes )
34
+ img = Pixelart::Image.new( width, height )
35
+ attributes.each do |num|
36
+ img.compose!( @spritesheet[ num ] )
37
+ end
38
+ img
39
+ end
40
+ alias_method :g, :generate
41
+
42
+ def width() @spritesheet.tile_width; end
43
+ def height() @spritesheet.tile_height; end
44
+ def count() @spritesheet.count; end
45
+ end # class Generator
46
+ end # module Orc721
47
+
48
+
49
+ ######
50
+ ## add convenience aliases - why? why not?
51
+ ORC721 = Orc721
@@ -3,14 +3,24 @@ module Pixelart
3
3
 
4
4
 
5
5
  class Image
6
- def sketch( sketch=4, line: 1 )
6
+ def sketch( sketch=4, line: 1,
7
+ line_color: Color::BLACK,
8
+ colorize: false )
9
+ ## todo/check: rename color option to fill or such - why? why not?
10
+
7
11
  # todo: line - find a better name eg. line_strenght/width or such?
8
12
  width = @img.width*sketch + (@img.width+1)*line
9
13
  height = @img.height*sketch + (@img.height+1)*line
10
14
 
11
15
  puts " #{width}x#{height}"
12
16
 
13
- img = Image.new( width, height, Color::WHITE )
17
+
18
+ background_color = colorize ? Color::TRANSPARENT
19
+ : Color::WHITE
20
+
21
+
22
+ img = Image.new( width, height, background_color )
23
+
14
24
 
15
25
  @img.width.times do |x|
16
26
  @img.height.times do |y|
@@ -19,12 +29,13 @@ class Image
19
29
  ## get surrounding pixels - if "out-of-bound" use transparent (0)
20
30
  left = x == 0 ? Color::TRANSPARENT : @img[x-1,y]
21
31
  top = y == 0 ? Color::TRANSPARENT : @img[x ,y-1]
32
+ diag = (x==0 || y== 0) ? Color::TRANSPARENT : @img[x-1,y-1]
22
33
 
23
34
  if pixel != left ## draw vertical line
24
- (sketch+line*2).times do |n|
25
- line.times do |m|
26
- img[ x*sketch + line*x + m,
27
- n + y*sketch + line*y] = Color::BLACK
35
+ line.times do |n|
36
+ (sketch+line*2).times do |m|
37
+ img[ x*sketch + line*x + n,
38
+ m + y*sketch + line*y] = line_color
28
39
  end
29
40
  end
30
41
  end
@@ -33,7 +44,7 @@ class Image
33
44
  (sketch+line*2).times do |n|
34
45
  line.times do |m|
35
46
  img[n + x*sketch + line*x,
36
- y*sketch + line*y + m] = Color::BLACK
47
+ y*sketch + line*y + m] = line_color
37
48
  end
38
49
  end
39
50
  end
@@ -42,10 +53,10 @@ class Image
42
53
  ## check special edge case for x and y to add "finish-up" right and bottom line
43
54
  if x == @img.width-1 && pixel != Color::TRANSPARENT
44
55
  ## draw vertical line
45
- (sketch+line*2).times do |n|
46
- line.times do |m|
47
- img[ (x+1)*sketch + line*(x+1) + m,
48
- n + y*sketch + line*y] = Color::BLACK
56
+ line.times do |n|
57
+ (sketch+line*2).times do |m|
58
+ img[ (x+1)*sketch + line*(x+1) + n,
59
+ m + y*sketch + line*y] = line_color
49
60
  end
50
61
  end
51
62
  end
@@ -55,12 +66,56 @@ class Image
55
66
  (sketch+line*2).times do |n|
56
67
  line.times do |m|
57
68
  img[n + x*sketch + line*x,
58
- (y+1)*sketch + line*(y+1) + m] = Color::BLACK
69
+ (y+1)*sketch + line*(y+1) + m] = line_color
59
70
  end
60
71
  end
61
72
  end
62
- end
63
- end
73
+
74
+ ###############
75
+ ## fill with pixel color if color true (default is false)
76
+ if colorize && pixel != Color::TRANSPARENT
77
+ sketch.times do |n|
78
+ sketch.times do |m|
79
+ img[x*sketch + line*(x+1) + n,
80
+ y*sketch + line*(y+1) + m] = pixel
81
+ end
82
+ end
83
+
84
+ if pixel == left ## draw vertical line
85
+ line.times do |n|
86
+ sketch.times do |m|
87
+ img[x*sketch + line*x + n,
88
+ y*sketch + line*(y+1) + m] = pixel
89
+ # (y%2==0 ? 0x0000ffff : 0x000088ff ) # (for debugging)
90
+ end
91
+ end
92
+ end
93
+
94
+ if pixel == top ## draw horizontal line
95
+ sketch.times do |n|
96
+ line.times do |m|
97
+ img[x*sketch + line*(x+1) + n,
98
+ y*sketch + line*y + m] = pixel
99
+ # (x%2==0 ? 0xff0000ff : 0x880000ff ) # (for debugging)
100
+ end
101
+ end
102
+ end
103
+
104
+ ## check all four same color (00,01)
105
+ ## (10, x) - bingo!
106
+ if pixel == left && pixel == top && pixel == diag
107
+ line.times do |n|
108
+ line.times do |m|
109
+ img[x*sketch + line*x + n,
110
+ y*sketch + line*y + m] = pixel
111
+ # 0xffff00ff # (for debugging)
112
+ end
113
+ end
114
+ end
115
+ end # colorize?
116
+
117
+ end # height.times
118
+ end # width.times
64
119
 
65
120
  img
66
121
  end
@@ -3,7 +3,7 @@ module Pixelart
3
3
 
4
4
  MAJOR = 1
5
5
  MINOR = 3
6
- PATCH = 6
6
+ PATCH = 7
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
9
9
  def self.version
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pixelart
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-17 00:00:00.000000000 Z
11
+ date: 2023-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cocos
@@ -100,9 +100,9 @@ dependencies:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: '3.23'
103
- description: pixelart - mint your own pixel art images off chain using any design
104
- (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes
105
- email: wwwmake@googlegroups.com
103
+ description: pixelart - yes, you can! generate your own pixel art images (off-blockchain)
104
+ using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes
105
+ email: gerald.bauer@gmail.com
106
106
  executables: []
107
107
  extensions: []
108
108
  extra_rdoc_files:
@@ -122,8 +122,10 @@ files:
122
122
  - lib/pixelart/convert.rb
123
123
  - lib/pixelart/generator.rb
124
124
  - lib/pixelart/image.rb
125
+ - lib/pixelart/invert.rb
125
126
  - lib/pixelart/led.rb
126
127
  - lib/pixelart/misc.rb
128
+ - lib/pixelart/orc721/generator.rb
127
129
  - lib/pixelart/pixelator.rb
128
130
  - lib/pixelart/sample.rb
129
131
  - lib/pixelart/silhouette.rb
@@ -134,7 +136,7 @@ files:
134
136
  - lib/pixelart/ukraine.rb
135
137
  - lib/pixelart/vector.rb
136
138
  - lib/pixelart/version.rb
137
- homepage: https://github.com/pixelartexchange/pixelart
139
+ homepage: https://github.com/learnpixelart/pixelart
138
140
  licenses:
139
141
  - Public Domain
140
142
  metadata: {}
@@ -158,6 +160,6 @@ requirements: []
158
160
  rubygems_version: 3.3.7
159
161
  signing_key:
160
162
  specification_version: 4
161
- summary: pixelart - mint your own pixel art images off chain using any design (in
162
- ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes
163
+ summary: pixelart - yes, you can! generate your own pixel art images (off-blockchain)
164
+ using any design (in ascii text) in any colors; incl. 2x/4x/8x zoom for bigger sizes
163
165
  test_files: []