pixelart 1.0.0 → 1.1.0

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: c77200956faad2093e12cba99a8f8a3339941e612406701a795eecdcdd8248d8
4
- data.tar.gz: d3dfbf4c9d278db95219b695dc55cea1b31debd8b5a08a20305135526d3618d1
3
+ metadata.gz: bb520f7fc94b0b7d62336829d92929bbeb27600f0042ab3f68d81b6e5b26d2b3
4
+ data.tar.gz: ed4756f69b5f5d5ca696a1105aa348b5b86ab33653ff7c34d1b24f4dc75e244f
5
5
  SHA512:
6
- metadata.gz: db9abc2122d9727e2fee58c54913174983ff3dd03d2e2658c4b0a84d80114f0f482673d2b7e51fea61dbbb423f1df05eb5e027ba51d741ab86dc7e16d6f2eb72
7
- data.tar.gz: 36c0733c3c5e15f18cca6787185eb2229fa8d7a98c3d037cf781295b8d32fc74be542a433de1504981afb984d9234730191dcf14443b3f614cd3dc9139d4fa7e
6
+ metadata.gz: caa3d9eeb12a4a59e4f6ec3191e432ae11d7cf44465e0b6722c69bda985af6caeea3a4390f773d4d535a38096f483c3d9467b03f63ed6547a168f79361db1991
7
+ data.tar.gz: d7f6d039eddc337b62ca22b338712a26423781b2a57703429469d376c02af0fef6aadd9182f4fb2cb755dc83f27c6bcbb97519ee528c01169ba8070534c7c377
data/Manifest.txt CHANGED
@@ -4,6 +4,7 @@ README.md
4
4
  Rakefile
5
5
  lib/pixelart.rb
6
6
  lib/pixelart/base.rb
7
+ lib/pixelart/blur.rb
7
8
  lib/pixelart/color.rb
8
9
  lib/pixelart/composite.rb
9
10
  lib/pixelart/gradient.rb
@@ -13,4 +14,5 @@ lib/pixelart/misc.rb
13
14
  lib/pixelart/palette.rb
14
15
  lib/pixelart/pixelator.rb
15
16
  lib/pixelart/sketch.rb
17
+ lib/pixelart/spots.rb
16
18
  lib/pixelart/version.rb
data/Rakefile CHANGED
@@ -19,6 +19,7 @@ Hoe.spec 'pixelart' do
19
19
 
20
20
  self.extra_deps = [
21
21
  ['chunky_png'],
22
+ ['mini_magick'],
22
23
  ]
23
24
 
24
25
  self.licenses = ['Public Domain']
data/lib/pixelart/base.rb CHANGED
@@ -1,12 +1,24 @@
1
- ## 3rd party
1
+ ###############
2
+ # 3rd party
2
3
  require 'chunky_png'
3
4
 
5
+ # optional
6
+ # note: requires installed imagemagick command line installed for usage
7
+ require 'mini_magick'
8
+
9
+
10
+
4
11
  ## stdlib
5
12
  require 'pp'
6
13
  require 'time'
7
14
  require 'date'
8
15
  require 'fileutils'
9
16
 
17
+ require 'json'
18
+ require 'yaml'
19
+
20
+
21
+
10
22
 
11
23
  ## our own code
12
24
  require 'pixelart/version' # note: let version always go first
@@ -20,9 +32,28 @@ require 'pixelart/pixelator'
20
32
 
21
33
  require 'pixelart/misc' ## misc helpers
22
34
 
23
- require 'pixelart/led' ## (special) effects / filters
35
+ #########################
36
+ # (special) effects / filters
37
+ require 'pixelart/led'
24
38
  require 'pixelart/sketch'
25
39
 
40
+ ## (special) effects / filters that require imagemagick
41
+
42
+
43
+ ## todo/check - use a config block or such - why? why not?
44
+ module Pixelart
45
+ MAGICK_SCRIPT = './tmp/magick_script.txt'
46
+ MAGICK_INPUT = './tmp/magick_input.png'
47
+ MAGICK_OUTPUT = './tmp/magick_output.png'
48
+ end
49
+
50
+ require 'pixelart/spots'
51
+ require 'pixelart/blur'
52
+
53
+
54
+
55
+
56
+
26
57
 
27
58
 
28
59
  ##########
@@ -0,0 +1,19 @@
1
+ module Pixelart
2
+
3
+ class Image
4
+
5
+ def blur( blur=2 )
6
+ @img.save( MAGICK_INPUT )
7
+
8
+ MiniMagick::Tool::Magick.new do |magick|
9
+ magick << MAGICK_INPUT
10
+ magick.blur( "#{blur}x#{blur}" )
11
+ magick << MAGICK_OUTPUT
12
+ end
13
+
14
+ Image.read( MAGICK_OUTPUT )
15
+ end
16
+
17
+ end # class Image
18
+ end # class Pixelart
19
+
@@ -0,0 +1,129 @@
1
+ module Pixelart
2
+
3
+ class Image
4
+
5
+
6
+ def spots( spot=10,
7
+ spacing: 0,
8
+ center: nil,
9
+ radius: nil,
10
+ background: nil,
11
+ lightness: nil,
12
+ odd: false )
13
+
14
+ width = @img.width
15
+ height = @img.height
16
+ ## puts " #{width}x#{height}"
17
+
18
+ min_center, max_center = center ? center : [0,0]
19
+ min_radius, max_radius = radius ? radius : [0,0]
20
+
21
+ background_color = background ? Color.parse( background ) : 0
22
+
23
+ min_lightness, max_lightness = lightness ? lightness : [0.0,0.0]
24
+
25
+ ## note: magick command line might get way too long, thus,
26
+ ## save commands to a script
27
+ script = String.new('')
28
+ script << "#{MAGICK_INPUT} \\\n"
29
+
30
+
31
+ width.times do |x|
32
+ height.times do |y|
33
+ color = @img[ x, y ]
34
+
35
+ if color == 0 ## transparent
36
+ if background ## change transparent to background
37
+ color = background_color
38
+ else
39
+ next ## skip transparent
40
+ end
41
+ end
42
+
43
+
44
+ if lightness
45
+ ## todo/check: make it work with alpha too
46
+ h,s,l = Color.to_hsl( color, include_alpha: false )
47
+
48
+ h = h % 360 ## make sure h(ue) is always positive!!!
49
+
50
+ ## note: rand() return between 0.0 and 1.0
51
+ l_diff = min_lightness +
52
+ (max_lightness-min_lightness)*rand()
53
+
54
+ lnew = [1.0, l+l_diff].min
55
+ lnew = [0.0, lnew].max
56
+
57
+ ## print " #{l}+#{l_diff}=#{lnew} "
58
+
59
+ color = Color.from_hsl( h,
60
+ [1.0, s].min,
61
+ lnew )
62
+ end
63
+
64
+ ## note: return hexstring with leading #
65
+ # e.g. 0 becomes #00000000
66
+ # and so on
67
+ color_hex = Color.to_hex( color, include_alpha: true )
68
+ script << "-fill '#{color_hex}' "
69
+
70
+ cx_offset,
71
+ cy_offset = if center ## randomize (offset off center +/-)
72
+ [(spot/2 + min_center) + rand( max_center-min_center ),
73
+ (spot/2 + min_center) + rand( max_center-min_center )]
74
+ else
75
+ [spot/2, ## center
76
+ spot/2]
77
+ end
78
+
79
+ cx = x*spot + x*spacing + cx_offset
80
+ cy = y*spot + y*spacing + cx_offset
81
+
82
+ px_offset = if radius ## randomize (radius +/-)
83
+ min_radius + rand( max_radius-min_radius )
84
+ else
85
+ spot/2
86
+ end
87
+ px = cx + px_offset
88
+ py = cy
89
+
90
+
91
+ if odd && (y % 2 == 1) ## add odd offset
92
+ cx += spot/2
93
+ px += spot/2
94
+ end
95
+
96
+ ## circle
97
+ ## give the center and any point on the perimeter (boundary)
98
+ script << "-draw 'circle #{cx},#{cy},#{px},#{py}' \\\n"
99
+ end
100
+ end
101
+
102
+ script << "-write #{MAGICK_OUTPUT}\n"
103
+
104
+
105
+ ## use an empty image (canvas) with transparent background
106
+ ## as magick input image
107
+ canvas = Image.new( width*spot+(width-1)*spacing,
108
+ height*spot+(height-1)*spacing )
109
+ canvas.save( MAGICK_INPUT )
110
+
111
+ ## note: save magick input first (see above) before save script
112
+ ## will (auto-)create missing directories in path (if missing)
113
+
114
+ File.open( MAGICK_SCRIPT, 'w:utf-8' ) do |f|
115
+ f.write( script )
116
+ end
117
+
118
+
119
+ MiniMagick::Tool::Magick.new do |magick|
120
+ magick.script( MAGICK_SCRIPT )
121
+ end
122
+
123
+ Image.read( MAGICK_OUTPUT )
124
+ end
125
+
126
+
127
+ end # class Image
128
+ end # class Pixelart
129
+
@@ -2,7 +2,7 @@
2
2
  module Pixelart
3
3
 
4
4
  MAJOR = 1
5
- MINOR = 0
5
+ MINOR = 1
6
6
  PATCH = 0
7
7
  VERSION = [MAJOR,MINOR,PATCH].join('.')
8
8
 
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.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-21 00:00:00.000000000 Z
11
+ date: 2021-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chunky_png
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mini_magick
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rdoc
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +88,7 @@ files:
74
88
  - Rakefile
75
89
  - lib/pixelart.rb
76
90
  - lib/pixelart/base.rb
91
+ - lib/pixelart/blur.rb
77
92
  - lib/pixelart/color.rb
78
93
  - lib/pixelart/composite.rb
79
94
  - lib/pixelart/gradient.rb
@@ -83,6 +98,7 @@ files:
83
98
  - lib/pixelart/palette.rb
84
99
  - lib/pixelart/pixelator.rb
85
100
  - lib/pixelart/sketch.rb
101
+ - lib/pixelart/spots.rb
86
102
  - lib/pixelart/version.rb
87
103
  homepage: https://github.com/rubycoco/pixel
88
104
  licenses: