pixelart 1.2.1 → 1.2.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/Manifest.txt +2 -0
- data/README.md +8 -9
- data/Rakefile +1 -1
- data/lib/pixelart/base.rb +4 -1
- data/lib/pixelart/composite.rb +58 -4
- data/lib/pixelart/image.rb +6 -0
- data/lib/pixelart/silhouette.rb +35 -0
- data/lib/pixelart/transparent.rb +60 -0
- data/lib/pixelart/version.rb +1 -1
- metadata +5 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6be97cd0f30e95965b6ca21d69142283d1e2869ba99e37b84245b5d95c47fda0
         | 
| 4 | 
            +
              data.tar.gz: 2bc68cf7a70d718e2d96b92f4401f44074b01282cb5ede85d548b36edac7d3d6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c329166bd2144e1e440d01447c9babc6d999de0aed2d9eb3dedaa521b016b829f0039d8fdf5475afeffbc46f2f75f1efaca1a95f73a3c3e968d653041ff4656a
         | 
| 7 | 
            +
              data.tar.gz: 44ab750a9bdec98770ff6ed325b8fac5883e693ae3356b08012184bdf72a20c1c88a023fb883dc437311df043d6a2d23012f54309d70dfa8e3402deb5683e945
         | 
    
        data/Manifest.txt
    CHANGED
    
    | @@ -13,7 +13,9 @@ lib/pixelart/led.rb | |
| 13 13 | 
             
            lib/pixelart/misc.rb
         | 
| 14 14 | 
             
            lib/pixelart/palette.rb
         | 
| 15 15 | 
             
            lib/pixelart/pixelator.rb
         | 
| 16 | 
            +
            lib/pixelart/silhouette.rb
         | 
| 16 17 | 
             
            lib/pixelart/sketch.rb
         | 
| 17 18 | 
             
            lib/pixelart/spots.rb
         | 
| 19 | 
            +
            lib/pixelart/transparent.rb
         | 
| 18 20 | 
             
            lib/pixelart/vector.rb
         | 
| 19 21 | 
             
            lib/pixelart/version.rb
         | 
    
        data/README.md
    CHANGED
    
    | @@ -3,8 +3,8 @@ | |
| 3 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
         | 
| 4 4 |  | 
| 5 5 |  | 
| 6 | 
            -
            * home  :: [github.com/ | 
| 7 | 
            -
            * bugs  :: [github.com/ | 
| 6 | 
            +
            * home  :: [github.com/pixelartexchange/pixel](https://github.com/pixelartexchange/pixel)
         | 
| 7 | 
            +
            * bugs  :: [github.com/pixelartexchange/pixel/issues](https://github.com/pixelartexchange/pixel/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 | 
            -
            
         | 
| 75 | 
            +
            
         | 
| 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 | 
            -
            
         | 
| 104 | 
            +
            
         | 
| 105 105 |  | 
| 106 106 |  | 
| 107 107 |  | 
| @@ -227,8 +227,8 @@ img5x.save( './i/vader5x.png' ) | |
| 227 227 |  | 
| 228 228 | 
             
            Voila!
         | 
| 229 229 |  | 
| 230 | 
            -
            
         | 
| 231 | 
            +
            
         | 
| 232 232 |  | 
| 233 233 |  | 
| 234 234 |  | 
| @@ -288,4 +288,3 @@ Just install the gem: | |
| 288 288 |  | 
| 289 289 | 
             
            The scripts are dedicated to the public domain.
         | 
| 290 290 | 
             
            Use it as you please with no restrictions whatsoever.
         | 
| 291 | 
            -
             | 
    
        data/Rakefile
    CHANGED
    
    | @@ -8,7 +8,7 @@ Hoe.spec 'pixelart' do | |
| 8 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 9 | 
             
              self.description = summary
         | 
| 10 10 |  | 
| 11 | 
            -
              self.urls    = { home: 'https://github.com/ | 
| 11 | 
            +
              self.urls    = { home: 'https://github.com/pixelartexchange/pixel' }
         | 
| 12 12 |  | 
| 13 13 | 
             
              self.author  = 'Gerald Bauer'
         | 
| 14 14 | 
             
              self.email   = 'wwwmake@googlegroups.com'
         | 
    
        data/lib/pixelart/base.rb
    CHANGED
    
    | @@ -37,9 +37,12 @@ require 'pixelart/pixelator' | |
| 37 37 | 
             
            require 'pixelart/misc'   ## misc helpers
         | 
| 38 38 |  | 
| 39 39 | 
             
            #########################
         | 
| 40 | 
            -
            # (special) effects / filters
         | 
| 40 | 
            +
            # (special) effects / filters / etc
         | 
| 41 41 | 
             
            require 'pixelart/led'
         | 
| 42 42 | 
             
            require 'pixelart/sketch'
         | 
| 43 | 
            +
            require 'pixelart/transparent'
         | 
| 44 | 
            +
            require 'pixelart/silhouette'
         | 
| 45 | 
            +
             | 
| 43 46 |  | 
| 44 47 | 
             
            ## (special) effects / filters that require imagemagick
         | 
| 45 48 |  | 
    
        data/lib/pixelart/composite.rb
    CHANGED
    
    | @@ -18,6 +18,20 @@ class ImageComposite < Image  # check: (re)name to Collage, Sheet, Sprites, or s | |
| 18 18 | 
             
                @tile_width  = kwargs[:width]  || kwargs[:tile_width]  || TILE_WIDTH
         | 
| 19 19 | 
             
                @tile_height = kwargs[:height] || kwargs[:tile_height] || TILE_HEIGHT
         | 
| 20 20 |  | 
| 21 | 
            +
                ## check for background
         | 
| 22 | 
            +
                background = kwargs[:background] || kwargs[:tile_background]
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                if background
         | 
| 25 | 
            +
                  ## wrap into an array if not already an array
         | 
| 26 | 
            +
                  ##  and convert all colors to true rgba colors as integer numbers
         | 
| 27 | 
            +
                  background = [background]   unless background.is_a?( Array )
         | 
| 28 | 
            +
                  @background_colors = background.map { |color| Color.parse( color ) }
         | 
| 29 | 
            +
                else
         | 
| 30 | 
            +
                  ## todo/check: use empty array instead of nil - why? why not?
         | 
| 31 | 
            +
                  @background_colors = nil
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
             | 
| 21 35 | 
             
                ## todo/fix: check type - args[0] is Image!!!
         | 
| 22 36 | 
             
                if args.size == 1   ## assume "copy" c'tor with passed in image
         | 
| 23 37 | 
             
                   img = args[0]    ## pass image through as-is
         | 
| @@ -32,12 +46,25 @@ class ImageComposite < Image  # check: (re)name to Collage, Sheet, Sprites, or s | |
| 32 46 | 
             
                   @tile_rows = args[1] || 3
         | 
| 33 47 | 
             
                   @tile_count = 0   # (track) current index (of added images)
         | 
| 34 48 |  | 
| 35 | 
            -
                    | 
| 36 | 
            -
             | 
| 49 | 
            +
                   background_color = if @background_colors && @background_colors.size == 1
         | 
| 50 | 
            +
                                         @background_colors[0]
         | 
| 51 | 
            +
                                      else
         | 
| 52 | 
            +
                                         0  # note: 0 is transparent (0) true color
         | 
| 53 | 
            +
                                      end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    ## todo/check - always auto-fill complete image (even if empty/no tiles)
         | 
| 56 | 
            +
                    ##                with background color if only one background color
         | 
| 57 | 
            +
                    ##                   why? why not??? or always follow the "model"
         | 
| 58 | 
            +
                    ##                                       with more than one background color???
         | 
| 59 | 
            +
                    img = ChunkyPNG::Image.new( @tile_cols * @tile_width,
         | 
| 60 | 
            +
                                                @tile_rows * @tile_height,
         | 
| 61 | 
            +
                                                background_color )
         | 
| 62 | 
            +
             | 
| 37 63 | 
             
                else
         | 
| 38 64 | 
             
                   raise ArgumentError, "cols, rows or image arguments expected; got: #{args.inspect}"
         | 
| 39 65 | 
             
                end
         | 
| 40 66 |  | 
| 67 | 
            +
             | 
| 41 68 | 
             
                puts "     #{img.height}x#{img.width} (height x width)"
         | 
| 42 69 |  | 
| 43 70 | 
             
                super( nil, nil, img )
         | 
| @@ -46,19 +73,46 @@ class ImageComposite < Image  # check: (re)name to Collage, Sheet, Sprites, or s | |
| 46 73 |  | 
| 47 74 | 
             
              def count() @tile_count; end
         | 
| 48 75 | 
             
              alias_method :size, :count   ## add size alias (confusing if starting with 0?) - why? why not?
         | 
| 76 | 
            +
              alias_method :tile_count, :count
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              def tile_width() @tile_width; end
         | 
| 79 | 
            +
              def tile_height() @tile_height; end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
             | 
| 49 82 |  | 
| 50 83 | 
             
              #####
         | 
| 51 84 | 
             
              # set / add tile
         | 
| 52 | 
            -
             | 
| 53 | 
            -
              def add( image )
         | 
| 85 | 
            +
              def _add( image )
         | 
| 54 86 | 
             
                y, x =  @tile_count.divmod( @tile_cols )
         | 
| 55 87 |  | 
| 56 88 | 
             
                puts "    [#{@tile_count}] @ (#{x}/#{y}) #{image.width}x#{image.height} (height x width)"
         | 
| 57 89 |  | 
| 90 | 
            +
                ## note: only used if more than one background color specified
         | 
| 91 | 
            +
                ##        needs to cycle through
         | 
| 92 | 
            +
                if @background_colors && @background_colors.size > 1
         | 
| 93 | 
            +
                  i = x + y*@tile_cols
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  ## note: cycle through background color for now
         | 
| 96 | 
            +
                  background_color = @background_colors[i % @background_colors.size]
         | 
| 97 | 
            +
                  background = Image.new( @tile_width, @tile_height, background_color )  ## todo/chekc: use "raw" ChunkyPNG:Image here - why? why not?
         | 
| 98 | 
            +
                  background.compose!( image )
         | 
| 99 | 
            +
                  image = background    ## switch - make image with background new image
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 58 102 | 
             
                ## note: image.image  - "unwrap" the "raw" ChunkyPNG::Image
         | 
| 59 103 | 
             
                @img.compose!( image.image, x*@tile_width, y*@tile_height )
         | 
| 60 104 | 
             
                @tile_count += 1
         | 
| 61 105 | 
             
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              def add( image_or_images )   ## note: allow adding of image OR array of images
         | 
| 108 | 
            +
                if image_or_images.is_a?( Array )
         | 
| 109 | 
            +
                  images = image_or_images
         | 
| 110 | 
            +
                  images.each { |image| _add( image ) }
         | 
| 111 | 
            +
                else
         | 
| 112 | 
            +
                  image = image_or_images
         | 
| 113 | 
            +
                  _add( image )
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
              end
         | 
| 62 116 | 
             
              alias_method :<<, :add
         | 
| 63 117 |  | 
| 64 118 |  | 
    
        data/lib/pixelart/image.rb
    CHANGED
    
    
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            module Pixelart
         | 
| 2 | 
            +
             | 
| 3 | 
            +
             | 
| 4 | 
            +
            ## todo/check:
         | 
| 5 | 
            +
            ##   use a different name for silhouette
         | 
| 6 | 
            +
            ##    - why not  - outline ???
         | 
| 7 | 
            +
            ##           or  - shadow  ???
         | 
| 8 | 
            +
            ##           or  - profile ???
         | 
| 9 | 
            +
            ##           or  - figure  ???
         | 
| 10 | 
            +
            ##           or  - shape   ???
         | 
| 11 | 
            +
            ##           or  - form    ???
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            class Image
         | 
| 14 | 
            +
              def silhouette( color='#000000' )
         | 
| 15 | 
            +
                color = Color.parse( color )
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                img = Image.new( @img.width, @img.height )
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                @img.width.times do |x|
         | 
| 20 | 
            +
                  @img.height.times do |y|
         | 
| 21 | 
            +
                    pixel = @img[x,y]
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    img[x,y] = if pixel == Color::TRANSPARENT  # transparent (0)
         | 
| 24 | 
            +
                                   Color::TRANSPARENT
         | 
| 25 | 
            +
                               else
         | 
| 26 | 
            +
                                   color
         | 
| 27 | 
            +
                               end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              img
         | 
| 31 | 
            +
            end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            end  # class Image
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            end # module Pixelart
         | 
| @@ -0,0 +1,60 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Pixelart
         | 
| 3 | 
            +
            class Image
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              def transparent( style = :solid, fuzzy: false )
         | 
| 6 | 
            +
                img = Image.new( width, height )
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
                background = self[0,0]
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                bh,bs,bl =  Color.to_hsl( background )
         | 
| 12 | 
            +
                bh = (bh % 360)  ## might might negative degree (always make positive)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                height.times do |y|
         | 
| 15 | 
            +
                    if style == :linear
         | 
| 16 | 
            +
                      background = self[0,y]
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      bh,bs,bl =  Color.to_hsl( background )
         | 
| 19 | 
            +
                      bh = (bh % 360)  ## might might negative degree (always make positive)
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  width.times do |x|
         | 
| 22 | 
            +
                    pixel = self[x,y]
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    if background == 0  ## special case if background is already transparent keep going
         | 
| 25 | 
            +
                      img[x,y] =  pixel
         | 
| 26 | 
            +
                    elsif fuzzy
         | 
| 27 | 
            +
                      ## check for more transparents
         | 
| 28 | 
            +
                        ##   not s  is 0.0 to 0.99  (100%)
         | 
| 29 | 
            +
                        ##   and l  is 0.0 to 0.99  (100%)
         | 
| 30 | 
            +
                      h,s,l =  Color.to_hsl( pixel )
         | 
| 31 | 
            +
                      h = (h % 360)  ## might might negative degree (always make positive)
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      ## try some kind-of fuzzy "heuristic" match on background color
         | 
| 34 | 
            +
                      if ((h >= bh-5) && (h <= bh+5)) &&
         | 
| 35 | 
            +
                         ((s >= bs-0.07) && (s <= bs+0.07)) &&
         | 
| 36 | 
            +
                         ((l >= bl-0.07) && (l <= bl+0.07))
         | 
| 37 | 
            +
                       img[x,y] = 0  ## Color::TRANSPARENT
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                       if h != bh || s != bs || l != bl
         | 
| 40 | 
            +
                          # report fuzzy background color
         | 
| 41 | 
            +
                          puts "  #{x}/#{y} fuzzy background #{[h,s,l]} ~= #{[bh,bs,bl]}"
         | 
| 42 | 
            +
                       end
         | 
| 43 | 
            +
                      else
         | 
| 44 | 
            +
                        img[x,y] =  pixel
         | 
| 45 | 
            +
                      end
         | 
| 46 | 
            +
                    else
         | 
| 47 | 
            +
                       if pixel == background
         | 
| 48 | 
            +
                        img[x,y] = 0   ## Color::TRANSPARENT
         | 
| 49 | 
            +
                       else
         | 
| 50 | 
            +
                         img[x,y] =  pixel
         | 
| 51 | 
            +
                       end
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
                img
         | 
| 56 | 
            +
              end # method transparent
         | 
| 57 | 
            +
             | 
| 58 | 
            +
             | 
| 59 | 
            +
            end   # class Image
         | 
| 60 | 
            +
            end  # module Pixelart
         | 
    
        data/lib/pixelart/version.rb
    CHANGED
    
    
    
        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.2. | 
| 4 | 
            +
              version: 1.2.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Gerald Bauer
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2022-01-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: chunky_png
         | 
| @@ -111,11 +111,13 @@ files: | |
| 111 111 | 
             
            - lib/pixelart/misc.rb
         | 
| 112 112 | 
             
            - lib/pixelart/palette.rb
         | 
| 113 113 | 
             
            - lib/pixelart/pixelator.rb
         | 
| 114 | 
            +
            - lib/pixelart/silhouette.rb
         | 
| 114 115 | 
             
            - lib/pixelart/sketch.rb
         | 
| 115 116 | 
             
            - lib/pixelart/spots.rb
         | 
| 117 | 
            +
            - lib/pixelart/transparent.rb
         | 
| 116 118 | 
             
            - lib/pixelart/vector.rb
         | 
| 117 119 | 
             
            - lib/pixelart/version.rb
         | 
| 118 | 
            -
            homepage: https://github.com/ | 
| 120 | 
            +
            homepage: https://github.com/pixelartexchange/pixel
         | 
| 119 121 | 
             
            licenses:
         | 
| 120 122 | 
             
            - Public Domain
         | 
| 121 123 | 
             
            metadata: {}
         |