pxlsrt 1.2.0 → 1.3.0
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/bin/pxlsrt +1 -1
- data/lib/pxlsrt/brute.rb +3 -3
- data/lib/pxlsrt/colors.rb +38 -7
- data/lib/pxlsrt/smart.rb +3 -3
- data/lib/pxlsrt/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 261def653de6b5100adf27ef5e0322d097d16563
|
4
|
+
data.tar.gz: 2e5e58532b22930c4b91d00b4beb62eca0b2077c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 320adc9d126207b337658fdaa7797a54de176db706232ddf30988ff4033dcd3e5cf51765a3f97130e0d49088187a8e15a41aae836ec402c42f919fe30d7b43a6
|
7
|
+
data.tar.gz: b0d6a304921ea9dabbc4ac2d9147a54d81667767f70922b0d673902c9f073b9769bee49d398b4cffe970275149d3b317afeb08d997963917886802577fa223fe
|
data/bin/pxlsrt
CHANGED
@@ -18,7 +18,7 @@ class CLI < Thor
|
|
18
18
|
class_option :vertical, :type => :boolean, :default => false, :aliases => "-v"
|
19
19
|
class_option :diagonal, :type => :boolean, :default => false, :aliases => "-d"
|
20
20
|
class_option :smooth, :type => :boolean, :default => false, :aliases => "-s"
|
21
|
-
class_option :method, :type => :string, :default => "sum-rgb", :banner => "[sum-rgb | red | green | blue | sum-hsb | hue | saturation | brightness | uniqueness | luma | random]", :aliases => "-m", :enum => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random"]
|
21
|
+
class_option :method, :type => :string, :default => "sum-rgb", :banner => "[sum-rgb | red | green | blue | sum-hsb | hue | saturation | brightness | uniqueness | luma | random | cyan | magenta | yellow | alpha | sum-rgba | sum-hsba]", :aliases => "-m", :enum => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random", "cyan", "magenta", "yellow", "alpha", "sum-rgba", "sum-hsba"]
|
22
22
|
class_option :verbose, :type => :boolean, :default => false, :aliases => "-V"
|
23
23
|
|
24
24
|
option :min, :type => :numeric, :default => Float::INFINITY, :banner => "MINIMUM BANDWIDTH"
|
data/lib/pxlsrt/brute.rb
CHANGED
@@ -34,7 +34,7 @@ module Pxlsrt
|
|
34
34
|
:vertical => [false, true],
|
35
35
|
:diagonal => [false, true],
|
36
36
|
:smooth => [false, true],
|
37
|
-
:method => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random"],
|
37
|
+
:method => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random", "cyan", "magenta", "yellow", "alpha", "sum-rgba", "sum-hsba"],
|
38
38
|
:verbose => [false, true],
|
39
39
|
:min => [Float::INFINITY, {:class => [Fixnum]}],
|
40
40
|
:max => [Float::INFINITY, {:class => [Fixnum]}],
|
@@ -76,7 +76,7 @@ module Pxlsrt
|
|
76
76
|
Pxlsrt::Helpers.verbose("Retrieving RGB values of pixels...") if options[:verbose]
|
77
77
|
kml=[]
|
78
78
|
for xy in 0..(w*h-1)
|
79
|
-
kml.push(Pxlsrt::Colors.
|
79
|
+
kml.push(Pxlsrt::Colors.getRGBA(png[xy % w,(xy/w).floor]))
|
80
80
|
end
|
81
81
|
if options[:vertical]==true
|
82
82
|
Pxlsrt::Helpers.verbose("Rotating image for vertical mode...") if options[:verbose]
|
@@ -134,7 +134,7 @@ module Pxlsrt
|
|
134
134
|
end
|
135
135
|
Pxlsrt::Helpers.verbose("Giving pixels new RGB values...") if options[:verbose]
|
136
136
|
for xy in 0..(w*h-1)
|
137
|
-
sorted[xy % w, (xy/w).floor]=Pxlsrt::Colors.
|
137
|
+
sorted[xy % w, (xy/w).floor]=Pxlsrt::Colors.arrayToRGBA(toImage[xy])
|
138
138
|
end
|
139
139
|
endTime=Time.now
|
140
140
|
timeElapsed=endTime-startTime
|
data/lib/pxlsrt/colors.rb
CHANGED
@@ -5,9 +5,9 @@ module Pxlsrt
|
|
5
5
|
# Includes color and image operations.
|
6
6
|
class Colors
|
7
7
|
##
|
8
|
-
# Converts a ChunkyPNG pixel into an array of the
|
9
|
-
def self.
|
10
|
-
return [ChunkyPNG::Color.r(pxl), ChunkyPNG::Color.g(pxl), ChunkyPNG::Color.b(pxl)]
|
8
|
+
# Converts a ChunkyPNG pixel into an array of the red, green, blue, and alpha values
|
9
|
+
def self.getRGBA(pxl)
|
10
|
+
return [ChunkyPNG::Color.r(pxl), ChunkyPNG::Color.g(pxl), ChunkyPNG::Color.b(pxl), ChunkyPNG::Color.a(pxl)]
|
11
11
|
end
|
12
12
|
##
|
13
13
|
# Check if file is a PNG image. ChunkyPNG only works with PNG images. Eventually, I might use conversion tools to add support, but not right now.
|
@@ -119,12 +119,13 @@ module Pxlsrt
|
|
119
119
|
r=((ca.collect { |c| c[0] }).inject{ |sum, el| sum+el }).to_f / ca.size
|
120
120
|
g=((ca.collect { |c| c[1] }).inject{ |sum, el| sum+el }).to_f / ca.size
|
121
121
|
b=((ca.collect { |c| c[2] }).inject{ |sum, el| sum+el }).to_f / ca.size
|
122
|
-
|
122
|
+
a=((ca.collect { |c| c[3] }).inject{ |sum, el| sum+el }).to_f / ca.size
|
123
|
+
return [r,g,b,a]
|
123
124
|
end
|
124
125
|
##
|
125
126
|
# Determines color distance from each other using the Pythagorean theorem.
|
126
127
|
def self.colorDistance(c1,c2)
|
127
|
-
return Math.sqrt((c1[0]-c2[0])**2+(c1[1]-c2[1])**2+(c1[2]-c2[2])**2)
|
128
|
+
return Math.sqrt((c1[0]-c2[0])**2+(c1[1]-c2[1])**2+(c1[2]-c2[2])**2+(c1[3]-c2[3])**2)
|
128
129
|
end
|
129
130
|
##
|
130
131
|
# Uses a combination of color averaging and color distance to find how "unique" a color is.
|
@@ -133,17 +134,43 @@ module Pxlsrt
|
|
133
134
|
end
|
134
135
|
##
|
135
136
|
# Sorts an array of colors based on a method.
|
137
|
+
# Available methods:
|
138
|
+
# * sum-rgb (default)
|
139
|
+
# * sum-rgba
|
140
|
+
# * red
|
141
|
+
# * yellow
|
142
|
+
# * green
|
143
|
+
# * cyan
|
144
|
+
# * blue
|
145
|
+
# * magenta
|
146
|
+
# * hue
|
147
|
+
# * saturation
|
148
|
+
# * brightness
|
149
|
+
# * sum-hsb
|
150
|
+
# * sum-hsba
|
151
|
+
# * uniqueness
|
152
|
+
# * luma
|
153
|
+
# * random
|
154
|
+
# * alpha
|
136
155
|
def self.pixelSort(list, how, reverse)
|
137
156
|
mhm=[]
|
138
157
|
case how.downcase
|
139
158
|
when "sum-rgb"
|
140
159
|
mhm= list.sort_by { |c| Pxlsrt::Colors.pxldex(c) }
|
160
|
+
when "sum-rgba"
|
161
|
+
mhm=list.sort_by { |c| Pxlsrt::Colors.pxldex(c)+c[3] }
|
141
162
|
when "red"
|
142
163
|
mhm= list.sort_by { |c| c[0] }
|
164
|
+
when "yellow"
|
165
|
+
mhm=list.sort_by { |c| c[0]+c[1] }
|
143
166
|
when "green"
|
144
167
|
mhm= list.sort_by { |c| c[1] }
|
168
|
+
when "cyan"
|
169
|
+
mhm=list.sort_by { |c| c[1]+c[2] }
|
145
170
|
when "blue"
|
146
171
|
mhm= list.sort_by { |c| c[2] }
|
172
|
+
when "magenta"
|
173
|
+
mhm=list.sort_by { |c| c[0]+c[2] }
|
147
174
|
when "hue"
|
148
175
|
mhm= list.sort_by { |c| Pxlsrt::Colors.rgb2hsb(c)[0] }
|
149
176
|
when "saturation"
|
@@ -152,6 +179,8 @@ module Pxlsrt
|
|
152
179
|
mhm= list.sort_by { |c| Pxlsrt::Colors.rgb2hsb(c)[2] }
|
153
180
|
when "sum-hsb"
|
154
181
|
mhm= list.sort_by { |c| k=Pxlsrt::Colors.rgb2hsb(c); k[0]*100/360+k[1]+k[2] }
|
182
|
+
when "sum-hsb"
|
183
|
+
mhm= list.sort_by { |c| k=Pxlsrt::Colors.rgb2hsb(c); k[0]*100/360+k[1]+k[2]+k[3]*100/255 }
|
155
184
|
when "uniqueness"
|
156
185
|
avg=Pxlsrt::Colors.colorAverage(list)
|
157
186
|
mhm=list.sort_by { |c| Pxlsrt::Colors.colorUniqueness(c, [avg]) }
|
@@ -159,6 +188,8 @@ module Pxlsrt
|
|
159
188
|
mhm=list.sort_by { |c| Pxlsrt::Colors.pxldex([c[0]*0.2126, c[1]*0.7152, c[2]*0.0722]) }
|
160
189
|
when "random"
|
161
190
|
mhm=list.shuffle
|
191
|
+
when "alpha"
|
192
|
+
mhm=list.sort_by{ |c| c[3] }
|
162
193
|
else
|
163
194
|
mhm= list.sort_by { |c| Pxlsrt::Colors.pxldex(c) }
|
164
195
|
end
|
@@ -210,8 +241,8 @@ module Pxlsrt
|
|
210
241
|
end
|
211
242
|
##
|
212
243
|
# Turns an RGB-like array into ChunkyPNG's color
|
213
|
-
def self.
|
214
|
-
return ChunkyPNG::Color.
|
244
|
+
def self.arrayToRGBA(a)
|
245
|
+
return ChunkyPNG::Color.rgba(a[0], a[1], a[2], a[3])
|
215
246
|
end
|
216
247
|
##
|
217
248
|
# Used in determining Sobel values.
|
data/lib/pxlsrt/smart.rb
CHANGED
@@ -36,7 +36,7 @@ module Pxlsrt
|
|
36
36
|
:vertical => [false, true],
|
37
37
|
:diagonal => [false, true],
|
38
38
|
:smooth => [false, true],
|
39
|
-
:method => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random"],
|
39
|
+
:method => ["sum-rgb", "red", "green", "blue", "sum-hsb", "hue", "saturation", "brightness", "uniqueness", "luma", "random", "cyan", "magenta", "yellow", "alpha", "sum-rgba", "sum-hsba"],
|
40
40
|
:verbose => [false, true],
|
41
41
|
:absolute => [false, true],
|
42
42
|
:threshold => [{:class => [Float, Fixnum]}],
|
@@ -90,7 +90,7 @@ module Pxlsrt
|
|
90
90
|
else
|
91
91
|
val = 2000000000
|
92
92
|
end
|
93
|
-
k.push({ "sobel" => val, "pixel" => [x, y], "color" => Pxlsrt::Colors.
|
93
|
+
k.push({ "sobel" => val, "pixel" => [x, y], "color" => Pxlsrt::Colors.getRGBA(img[x, y]) })
|
94
94
|
end
|
95
95
|
if options[:vertical]==true
|
96
96
|
Pxlsrt::Helpers.verbose("Rotating image for vertical mode...") if options[:verbose]
|
@@ -213,7 +213,7 @@ module Pxlsrt
|
|
213
213
|
end
|
214
214
|
Pxlsrt::Helpers.verbose("Giving pixels new RGB values...") if options[:verbose]
|
215
215
|
for px in 0..(w*h-1)
|
216
|
-
edge[px % w, (px/w).floor]=Pxlsrt::Colors.
|
216
|
+
edge[px % w, (px/w).floor]=Pxlsrt::Colors.arrayToRGBA(image[px])
|
217
217
|
end
|
218
218
|
endTime=Time.now
|
219
219
|
timeElapsed=endTime-startTime
|
data/lib/pxlsrt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pxlsrt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- EVA-01
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|