pixelart 1.3.3 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|