pixelart 1.3.3 → 1.3.6
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 +1 -0
- data/Rakefile +1 -1
- data/lib/pixelart/base.rb +8 -4
- data/lib/pixelart/convert.rb +54 -0
- data/lib/pixelart/image.rb +73 -7
- data/lib/pixelart/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92c0d22468eb46c7120b5cdfeeca63f0d4049bdfc055037186e05690e81f3404
|
4
|
+
data.tar.gz: 1d5cb926059539d9bce964243a099307e1c03de5be9de7c5285bc76d54acb7cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17a632b18859b6c341e5d80ecc91bdacff31037c3067efcda244d722515e70f8689613dbc205ed0e43300fdb5e5e36da70e079287adf7b4775041ca6ed3d1653
|
7
|
+
data.tar.gz: 8fe33b806a59f408ce6666de365e13023175f87314b832cad3f196dc96f4c83aee37013ab554e30e015e2df621047a28091937506b03df1f09deef10773dc5e3
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
data/lib/pixelart/base.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require 'cocos'
|
2
|
+
require 'base64'
|
3
|
+
|
4
|
+
|
1
5
|
###
|
2
6
|
# base module
|
3
7
|
require 'pixelart/colors'
|
@@ -13,10 +17,6 @@ require 'chunky_png'
|
|
13
17
|
require 'mini_magick'
|
14
18
|
|
15
19
|
|
16
|
-
# bonus / prologue / convenience 3rd party
|
17
|
-
require 'csvreader'
|
18
|
-
|
19
|
-
|
20
20
|
|
21
21
|
## our own code
|
22
22
|
require 'pixelart/version' # note: let version always go first
|
@@ -63,6 +63,10 @@ require 'pixelart/blur'
|
|
63
63
|
|
64
64
|
|
65
65
|
|
66
|
+
###
|
67
|
+
# mover helpers / utils
|
68
|
+
require 'pixelart/convert'
|
69
|
+
|
66
70
|
|
67
71
|
|
68
72
|
puts Pixelart.banner # say hello
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Pixelart
|
2
|
+
|
3
|
+
class Image
|
4
|
+
|
5
|
+
|
6
|
+
## helper to convert (all) image in directory
|
7
|
+
## chech: move to ImageUtils.convert or such - why? why not?
|
8
|
+
##
|
9
|
+
## what about the name e.g. rename to convert_dir or
|
10
|
+
## batch_convert such - why? why not?
|
11
|
+
def self.convert( dir, from: 'jpg',
|
12
|
+
to: 'png',
|
13
|
+
outdir: nil,
|
14
|
+
overwrite: true )
|
15
|
+
|
16
|
+
outdir = dir if outdir.nil?
|
17
|
+
|
18
|
+
files = Dir.glob( "#{dir}/*.#{from}" )
|
19
|
+
puts "==> found #{files.size} image(s) to convert from #{from} to #{to} (overwrite mode set to: #{overwrite})"
|
20
|
+
|
21
|
+
files.each_with_index do |file,i|
|
22
|
+
dirname = File.dirname( file )
|
23
|
+
extname = File.extname( file )
|
24
|
+
basename = File.basename( file, extname )
|
25
|
+
|
26
|
+
## skip convert if target / dest file already exists
|
27
|
+
next if overwrite == false && File.exist?( "#{outdir}/#{basename}.#{to}" )
|
28
|
+
|
29
|
+
## note: make sure outdir exists (magic will not create it??)
|
30
|
+
FileUtils.mkdir_p( outdir ) unless Dir.exist?( outdir )
|
31
|
+
|
32
|
+
cmd = "magick convert #{dirname}/#{basename}.#{from} #{outdir}/#{basename}.#{to}"
|
33
|
+
|
34
|
+
puts " [#{i+1}/#{files.size}] - #{cmd}"
|
35
|
+
## todo/fix: check return value!!! magick comand not available (in path) and so on!!!
|
36
|
+
system( cmd )
|
37
|
+
|
38
|
+
if from == 'gif'
|
39
|
+
## assume multi-images for gif
|
40
|
+
## save image-0.png to image.png
|
41
|
+
path0 = "#{outdir}/#{basename}-0.#{to}"
|
42
|
+
path = "#{outdir}/#{basename}.#{to}"
|
43
|
+
|
44
|
+
puts " saving #{path0} to #{path}..."
|
45
|
+
|
46
|
+
blob = File.open( path0, 'rb' ) { |f| f.read }
|
47
|
+
File.open( path, 'wb' ) { |f| f.write( blob ) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end # class Image
|
54
|
+
end # class Pixelart
|
data/lib/pixelart/image.rb
CHANGED
@@ -2,12 +2,49 @@ module Pixelart
|
|
2
2
|
|
3
3
|
class Image
|
4
4
|
|
5
|
+
|
6
|
+
## keep track of all (inherited) subclasses via inherited hook
|
7
|
+
##
|
8
|
+
## change/rename to descendants - why? why not?
|
9
|
+
##
|
10
|
+
## note about rails (activesupport?)
|
11
|
+
## If you use rails >= 3, you have two options in place.
|
12
|
+
## Use .descendants if you want more than one level depth of children classes,
|
13
|
+
## or use .subclasses for the first level of child classes.
|
14
|
+
|
15
|
+
def self.subclasses
|
16
|
+
@subclasses ||= []
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.inherited( subclass )
|
20
|
+
subclasses << subclass
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
5
26
|
def self.read( path ) ## convenience helper
|
6
27
|
img_inner = ChunkyPNG::Image.from_file( path )
|
7
|
-
|
8
|
-
|
28
|
+
new( img_inner.width, img_inner.height, img_inner )
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.parse_base64( str )
|
32
|
+
blob = Base64.decode64( str )
|
33
|
+
img_inner = ChunkyPNG::Image.from_blob( blob )
|
34
|
+
new( img_inner.width, img_inner.height, img_inner )
|
9
35
|
end
|
10
36
|
|
37
|
+
def self.blob( blob )
|
38
|
+
img_inner = ChunkyPNG::Image.from_blob( blob )
|
39
|
+
new( img_inner.width, img_inner.height, img_inner )
|
40
|
+
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
alias_method :from_blob, :blob
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
|
11
48
|
|
12
49
|
|
13
50
|
CHARS = '.@xo^~%*+=:' ## todo/check: rename to default chars or such? why? why not?
|
@@ -95,6 +132,19 @@ def crop( x, y, crop_width, crop_height )
|
|
95
132
|
end
|
96
133
|
|
97
134
|
|
135
|
+
## shift image n-pixels to the left (NOT changing width/height)
|
136
|
+
def left( left )
|
137
|
+
img = Image.new( width, height )
|
138
|
+
img.compose!( crop( 0, 0, width-left, height ), left, 0 )
|
139
|
+
img
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
def to_blob
|
144
|
+
@img.to_blob
|
145
|
+
end
|
146
|
+
alias_method :blob, :to_blob
|
147
|
+
|
98
148
|
|
99
149
|
#######################
|
100
150
|
## filter / effects
|
@@ -106,19 +156,35 @@ end
|
|
106
156
|
alias_method :greyscale, :grayscale
|
107
157
|
|
108
158
|
|
109
|
-
|
110
|
-
|
111
|
-
|
159
|
+
######################
|
160
|
+
# flip horizontally on x-axis (top-to-bottom/bottom-to-top)
|
161
|
+
# e.g. pixels on the top will now be pixels on the bottom
|
162
|
+
#
|
163
|
+
# todo/check: commom use is reverse?
|
164
|
+
# e.g. flip_vertically is top-to-bottom!!!
|
165
|
+
# use flip_y_axis, flip_x_axis or something else - why? why not?
|
166
|
+
# check photoshop and gimp terminology and update later if different - why? why not?
|
167
|
+
def flip_horizontally
|
168
|
+
img = @img.flip_horizontally
|
112
169
|
Image.new( img.width, img.height, img )
|
113
170
|
end
|
114
|
-
|
171
|
+
## keep flop? alias - why? why not?
|
172
|
+
## note: chunky_png use flip alias for flip_horizontally!!!!
|
173
|
+
alias_method :flop, :flip_horizontally
|
174
|
+
|
175
|
+
|
115
176
|
|
177
|
+
###
|
178
|
+
# flip vertially on y-axis (right-to-left/left-to-right)
|
179
|
+
# e.g. pixels on the left will now be pixels on the right
|
116
180
|
def mirror
|
117
181
|
img = @img.mirror
|
118
182
|
Image.new( img.width, img.height, img )
|
119
183
|
end
|
120
184
|
alias_method :flip_vertically, :mirror
|
121
|
-
alias_method :
|
185
|
+
alias_method :flip, :mirror ## note: chunky_png use flip alias for flip_horizontally (top-to-bottom)!!!!
|
186
|
+
alias_method :phlip, :mirror ## philip the intern ("hand-phlip one-by-one")
|
187
|
+
alias_method :hand_phlip, :mirror
|
122
188
|
|
123
189
|
|
124
190
|
def rotate_counter_clockwise # 90 degrees
|
data/lib/pixelart/version.rb
CHANGED
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pixelart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
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-
|
11
|
+
date: 2022-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: cocos
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: pixelart-colors
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: chunky_png
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: mini_magick
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- lib/pixelart/blur.rb
|
120
120
|
- lib/pixelart/circle.rb
|
121
121
|
- lib/pixelart/composite.rb
|
122
|
+
- lib/pixelart/convert.rb
|
122
123
|
- lib/pixelart/generator.rb
|
123
124
|
- lib/pixelart/image.rb
|
124
125
|
- lib/pixelart/led.rb
|