drakkon 0.0.3
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 +7 -0
- data/README.md +50 -0
- data/bin/drakkon +16 -0
- data/lib/drakkon/build.rb +126 -0
- data/lib/drakkon/cli.rb +64 -0
- data/lib/drakkon/gem/bundle.rb +116 -0
- data/lib/drakkon/gem/cli.rb +46 -0
- data/lib/drakkon/gem/configure.rb +73 -0
- data/lib/drakkon/gem/gem.rb +56 -0
- data/lib/drakkon/gem/helpers/check.rb +110 -0
- data/lib/drakkon/gem/helpers/files.rb +57 -0
- data/lib/drakkon/gem/helpers/general.rb +21 -0
- data/lib/drakkon/gem/helpers/modules.rb +51 -0
- data/lib/drakkon/gem/helpers/source.rb +43 -0
- data/lib/drakkon/gem/install.rb +24 -0
- data/lib/drakkon/init.rb +85 -0
- data/lib/drakkon/lib/hub.rb +112 -0
- data/lib/drakkon/lib/images/biggest.rb +43 -0
- data/lib/drakkon/lib/images/blur.rb +76 -0
- data/lib/drakkon/lib/images/bulk_rename.rb +86 -0
- data/lib/drakkon/lib/images/canvas.rb +74 -0
- data/lib/drakkon/lib/images/cli.rb +78 -0
- data/lib/drakkon/lib/images/desaturate.rb +58 -0
- data/lib/drakkon/lib/images/flip_flop.rb +76 -0
- data/lib/drakkon/lib/images/gif.rb +61 -0
- data/lib/drakkon/lib/images/index.rb +185 -0
- data/lib/drakkon/lib/images/list.rb +56 -0
- data/lib/drakkon/lib/images/modulate.rb +69 -0
- data/lib/drakkon/lib/images/resize.rb +83 -0
- data/lib/drakkon/lib/images/roll.rb +68 -0
- data/lib/drakkon/lib/images/rotate.rb +60 -0
- data/lib/drakkon/lib/images/scale.rb +86 -0
- data/lib/drakkon/lib/images/sepia.rb +64 -0
- data/lib/drakkon/lib/images/shift.rb +89 -0
- data/lib/drakkon/lib/images/split.rb +93 -0
- data/lib/drakkon/lib/images/spritesheet.rb +85 -0
- data/lib/drakkon/lib/images/trim.rb +56 -0
- data/lib/drakkon/lib/images/white.rb +56 -0
- data/lib/drakkon/lib/logbot.rb +86 -0
- data/lib/drakkon/lib/manifest.rb +74 -0
- data/lib/drakkon/lib/pastel.rb +49 -0
- data/lib/drakkon/lib/settings.rb +130 -0
- data/lib/drakkon/lib/shims.rb +8 -0
- data/lib/drakkon/lib/version.rb +79 -0
- data/lib/drakkon/release.rb +3 -0
- data/lib/drakkon/run/commands/images.rb +14 -0
- data/lib/drakkon/run/commands/log.rb +57 -0
- data/lib/drakkon/run/commands/restart.rb +14 -0
- data/lib/drakkon/run/helpers.rb +60 -0
- data/lib/drakkon/run/reader_shim.rb +110 -0
- data/lib/drakkon/run/tty.rb +119 -0
- data/lib/drakkon/run.rb +80 -0
- data/lib/drakkon/setup.rb +31 -0
- data/lib/drakkon/skeleton/cli.rb +46 -0
- data/lib/drakkon/skeleton/deploy.rb +105 -0
- data/lib/drakkon/skeleton/helpers/check.rb +143 -0
- data/lib/drakkon/skeleton/helpers/general.rb +21 -0
- data/lib/drakkon/skeleton/helpers/source.rb +43 -0
- data/lib/drakkon/skeleton/install.rb +31 -0
- data/lib/drakkon/skeleton/template.rb +14 -0
- data/lib/drakkon/web.rb +68 -0
- data/lib/drakkon.rb +43 -0
- metadata +302 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# Roll Images like an old TV
|
4
|
+
# https://imagemagick.org/Usage/warping/#roll
|
5
|
+
module Roll
|
6
|
+
def self.run!(args = [])
|
7
|
+
# Amount
|
8
|
+
amount = if args.empty?
|
9
|
+
prompt.ask('Roll Amount(+-LR+-UD)? (e.g. -10+0): ')
|
10
|
+
else
|
11
|
+
args.shift
|
12
|
+
end
|
13
|
+
|
14
|
+
puts <<~HELP
|
15
|
+
Usage [WxH] [gravity]
|
16
|
+
- Run in the directory you wish to modify the images
|
17
|
+
- Rolls the images via MiniMagick
|
18
|
+
|
19
|
+
Roll: Amount: #{amount}
|
20
|
+
Current Directory;
|
21
|
+
#{Dir.pwd.pastel(:yellow)}
|
22
|
+
|
23
|
+
Images:
|
24
|
+
HELP
|
25
|
+
|
26
|
+
images.sort.each do |img|
|
27
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
28
|
+
puts " - #{img_s}"
|
29
|
+
end
|
30
|
+
puts
|
31
|
+
|
32
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Roll!? #{'(Destructive)'.pastel(:red)}"
|
33
|
+
|
34
|
+
start(amount)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.start(amount)
|
38
|
+
images.each do |img|
|
39
|
+
LogBot.info('Image Roll', img)
|
40
|
+
process(img, amount)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.process(file, amount)
|
45
|
+
image = MiniMagick::Image.open(file)
|
46
|
+
|
47
|
+
LogBot.info('Image Roll', "Rolling: #{file}")
|
48
|
+
|
49
|
+
img = image.combine_options do |cmd|
|
50
|
+
cmd.background 'transparent'
|
51
|
+
cmd.roll amount
|
52
|
+
end
|
53
|
+
|
54
|
+
img.write file
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.images
|
58
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.prompt
|
62
|
+
TTY::Prompt.new(active_color: :cyan)
|
63
|
+
end
|
64
|
+
# =========================================================
|
65
|
+
end
|
66
|
+
# =========================================================
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module Rotate
|
5
|
+
def self.run!(args = [])
|
6
|
+
# Rotate
|
7
|
+
angle = if args.empty?
|
8
|
+
prompt.ask('Rotate Angle? (e.g. 90,180,45): ')
|
9
|
+
else
|
10
|
+
args.shift
|
11
|
+
end
|
12
|
+
|
13
|
+
puts <<~HELP
|
14
|
+
Usage [angle]
|
15
|
+
- Run in the directory you wish to modify the images
|
16
|
+
- Rotate the images via MiniMagick
|
17
|
+
- y / yes / Y / Yes for affirmative args
|
18
|
+
|
19
|
+
Angle: #{angle}
|
20
|
+
|
21
|
+
Images:
|
22
|
+
HELP
|
23
|
+
|
24
|
+
images.sort.each do |img|
|
25
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
26
|
+
puts " - #{img_s}"
|
27
|
+
end
|
28
|
+
puts
|
29
|
+
|
30
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Rotate!? #{'(Destructive)'.pastel(:red)}"
|
31
|
+
|
32
|
+
start(angle)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.start(angle)
|
36
|
+
images.each do |img|
|
37
|
+
LogBot.info('Image Rotate', img)
|
38
|
+
process(img, angle)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.process(file, angle)
|
43
|
+
image = MiniMagick::Image.open(file)
|
44
|
+
|
45
|
+
image.rotate(angle)
|
46
|
+
image.write file
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.images
|
50
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.prompt
|
54
|
+
TTY::Prompt.new(active_color: :cyan)
|
55
|
+
end
|
56
|
+
# =========================================================
|
57
|
+
end
|
58
|
+
# =========================================================
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module Scale
|
5
|
+
def self.run!(args = [])
|
6
|
+
# Sizing
|
7
|
+
scale = if args.empty?
|
8
|
+
prompt.ask('Target Scale? (e.g. 100,50,25): ')
|
9
|
+
else
|
10
|
+
args.shift
|
11
|
+
end
|
12
|
+
|
13
|
+
scale = scale.to_f / 100
|
14
|
+
LogBot.info('Image Scale', "Scale: #{scale}")
|
15
|
+
|
16
|
+
# Recommend as Options?
|
17
|
+
# image.filter 'Sinc'
|
18
|
+
# image.filter 'Gaussian'
|
19
|
+
|
20
|
+
# Potentially Support Custom Filters?
|
21
|
+
filter = if args.empty?
|
22
|
+
'Lanczos2'
|
23
|
+
else
|
24
|
+
args.shift
|
25
|
+
end
|
26
|
+
|
27
|
+
puts <<~HELP
|
28
|
+
Usage [size] [filter = Lanczos2]
|
29
|
+
- Run in the directory you wish to modify the images
|
30
|
+
- Resizes the images via MiniMagick
|
31
|
+
- Each image sizing values scaled by (value / 100)
|
32
|
+
|
33
|
+
#{'Note: this will be best fit! This will retain aspect ratio!'.pastel(:bright_blue)}
|
34
|
+
|
35
|
+
Filter: #{filter} to Size: #{scale}
|
36
|
+
Current Directory;
|
37
|
+
#{Dir.pwd.pastel(:yellow)}
|
38
|
+
|
39
|
+
Images:
|
40
|
+
HELP
|
41
|
+
|
42
|
+
images.sort.each do |img|
|
43
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
44
|
+
puts " - #{img_s}"
|
45
|
+
end
|
46
|
+
puts
|
47
|
+
|
48
|
+
unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Scale Images!? #{'(Destructive)'.pastel(:red)}"
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
|
52
|
+
start(filter, scale)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.start(filter, scale)
|
56
|
+
images.each do |img|
|
57
|
+
resize(img, filter, scale)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.resize(file, filter, scale)
|
62
|
+
image = MiniMagick::Image.open(file)
|
63
|
+
|
64
|
+
# Calculate Size / Width Primpt
|
65
|
+
width = (image.width * scale).round
|
66
|
+
height = (image.height * scale).round
|
67
|
+
size = "#{width}x#{height}"
|
68
|
+
|
69
|
+
LogBot.info('Image Scale', "#{File.basename file} => #{scale}: #{size}")
|
70
|
+
image.filter filter
|
71
|
+
image.resize size
|
72
|
+
image.write file
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.images
|
76
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.prompt
|
80
|
+
TTY::Prompt.new(active_color: :cyan)
|
81
|
+
end
|
82
|
+
# =========================================================
|
83
|
+
end
|
84
|
+
# =========================================================
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
# https://imagemagick.org/script/command-line-options.php#sepia-tone
|
5
|
+
module Sepia
|
6
|
+
def self.run!(args = [])
|
7
|
+
# Amount
|
8
|
+
amount = if args.empty?
|
9
|
+
prompt.ask('Sepia Threshold? (e.g. 80): ')
|
10
|
+
else
|
11
|
+
args.shift
|
12
|
+
end
|
13
|
+
|
14
|
+
puts <<~HELP
|
15
|
+
Usage
|
16
|
+
- Run in the directory you wish to modify the images
|
17
|
+
- Applies a special effect to the image, similar to the effect achieved in a photo darkroom by sepia toning.
|
18
|
+
|
19
|
+
Sepia: Amount: #{amount}
|
20
|
+
Current Directory;
|
21
|
+
#{Dir.pwd.pastel(:yellow)}
|
22
|
+
|
23
|
+
Images:
|
24
|
+
HELP
|
25
|
+
|
26
|
+
images.sort.each do |img|
|
27
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
28
|
+
puts " - #{img_s}"
|
29
|
+
end
|
30
|
+
puts
|
31
|
+
|
32
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Sepia!? #{'(Destructive)'.pastel(:red)}"
|
33
|
+
|
34
|
+
start(amount)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.start(amount)
|
38
|
+
images.each do |img|
|
39
|
+
LogBot.info('Image Sepia', img)
|
40
|
+
process(img, amount)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.process(file, amount)
|
45
|
+
convert = MiniMagick::Tool::Convert.new
|
46
|
+
convert << file
|
47
|
+
convert.colorspace('RGB')
|
48
|
+
convert.sepia_tone("#{amount}%")
|
49
|
+
convert << file
|
50
|
+
convert.call
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.images
|
54
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.prompt
|
58
|
+
TTY::Prompt.new(active_color: :cyan)
|
59
|
+
end
|
60
|
+
# =========================================================
|
61
|
+
end
|
62
|
+
# =========================================================
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module Shift
|
5
|
+
# TODO: Deprecate / Fix / Remove?
|
6
|
+
# This isn't behaving like I expected it to getting a canvas shift
|
7
|
+
def self.run!(args = [])
|
8
|
+
# Sizing
|
9
|
+
size = if args.empty?
|
10
|
+
prompt.ask('Shift Amount(LRxUD)? (e.g. -10x0): ')
|
11
|
+
else
|
12
|
+
args.shift
|
13
|
+
end
|
14
|
+
|
15
|
+
gravity = if args.empty?
|
16
|
+
prompt.ask('Gravity? (west,east,north,south): ', default: 'west')
|
17
|
+
else
|
18
|
+
args.shift
|
19
|
+
end
|
20
|
+
|
21
|
+
puts <<~HELP
|
22
|
+
Usage [WxH] [gravity]
|
23
|
+
- Run in the directory you wish to modify the images
|
24
|
+
- Shifts the images via MiniMagick
|
25
|
+
#{' '}
|
26
|
+
|
27
|
+
Shift: Size: #{size}, Gravity: #{gravity}
|
28
|
+
Current Directory;
|
29
|
+
#{Dir.pwd.pastel(:yellow)}
|
30
|
+
|
31
|
+
Images:
|
32
|
+
HELP
|
33
|
+
|
34
|
+
images.sort.each do |img|
|
35
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
36
|
+
puts " - #{img_s}"
|
37
|
+
end
|
38
|
+
puts
|
39
|
+
|
40
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Shift!? #{'(Destructive)'.pastel(:red)}"
|
41
|
+
|
42
|
+
start(size, gravity)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.start(size, gravity)
|
46
|
+
images.each do |img|
|
47
|
+
LogBot.info('Image Shift', img)
|
48
|
+
process(img, gravity, size)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.process(file, gravity, size)
|
53
|
+
image = MiniMagick::Image.open(file)
|
54
|
+
# image << file
|
55
|
+
# convert.colorspace('sRGB')
|
56
|
+
# convert.fill('white')
|
57
|
+
# convert.colorize(100)
|
58
|
+
# convert << file
|
59
|
+
# convert.call
|
60
|
+
|
61
|
+
LogBot.info('Image Shift', "Shifting: #{file}")
|
62
|
+
|
63
|
+
img = image.combine_options do |cmd|
|
64
|
+
cmd.gravity gravity
|
65
|
+
cmd.background 'transparent'
|
66
|
+
cmd.splice size
|
67
|
+
end
|
68
|
+
|
69
|
+
img.write file
|
70
|
+
|
71
|
+
# image.gravity gravity
|
72
|
+
# image.background 'transparent'
|
73
|
+
# image.splice size
|
74
|
+
# image.call
|
75
|
+
# image.write file
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.images
|
79
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.prompt
|
83
|
+
TTY::Prompt.new(active_color: :cyan)
|
84
|
+
end
|
85
|
+
# =========================================================
|
86
|
+
end
|
87
|
+
# =========================================================
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module SplitSpriteSheet
|
5
|
+
def self.run!(args = [])
|
6
|
+
image = if args.empty?
|
7
|
+
prompt.select('What image to split?', images, filter: true)
|
8
|
+
else
|
9
|
+
args.first
|
10
|
+
end
|
11
|
+
|
12
|
+
image = "#{Dir.pwd}/#{image}.png"
|
13
|
+
|
14
|
+
unless File.exist?(image)
|
15
|
+
LogBot.fatal('Split', "Unable to find: '#{image}'")
|
16
|
+
exit 1
|
17
|
+
end
|
18
|
+
|
19
|
+
sizing = dimensions(image)
|
20
|
+
|
21
|
+
LogBot.info('Split', "Image Size: #{sizing[:w]}, #{sizing[:h]}")
|
22
|
+
|
23
|
+
# Columns
|
24
|
+
columns = if args.empty?
|
25
|
+
prompt.ask('Columns: ', default: 5, convert: :int)
|
26
|
+
else
|
27
|
+
args.shift
|
28
|
+
end
|
29
|
+
|
30
|
+
# Rows
|
31
|
+
rows = if args.empty?
|
32
|
+
prompt.ask('Rows: ', default: 5, convert: :int)
|
33
|
+
else
|
34
|
+
args.shift
|
35
|
+
end
|
36
|
+
|
37
|
+
width = sizing[:w] / columns
|
38
|
+
height = sizing[:h] / rows
|
39
|
+
|
40
|
+
puts <<~HELP
|
41
|
+
Usage [file]
|
42
|
+
- Modify one file into a directory of split images
|
43
|
+
|
44
|
+
|
45
|
+
Split:
|
46
|
+
Rows: #{rows}, Columns: #{columns}
|
47
|
+
Size: #{width} x #{height}
|
48
|
+
Current Directory: #{Dir.pwd.pastel(:yellow)}
|
49
|
+
|
50
|
+
Image to Modify: #{image}
|
51
|
+
HELP
|
52
|
+
|
53
|
+
puts
|
54
|
+
|
55
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Split!? #{'(Destructive)'.pastel(:red)}"
|
56
|
+
|
57
|
+
process(image, width, height)
|
58
|
+
rescue TTY::Reader::InputInterrupt
|
59
|
+
exit 0
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.process(file, width, height)
|
63
|
+
LogBot.info('Image Split', file)
|
64
|
+
convert = MiniMagick::Tool::Convert.new
|
65
|
+
convert << file
|
66
|
+
convert.crop("#{width}x#{height}")
|
67
|
+
convert << file
|
68
|
+
convert.call
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.images
|
72
|
+
Dir["#{Dir.pwd}/*.png"].map do |x|
|
73
|
+
File.basename(x, '.png')
|
74
|
+
end.sort
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.dimensions(file)
|
78
|
+
img = MiniMagick::Image.open(file)
|
79
|
+
|
80
|
+
{
|
81
|
+
w: img.width,
|
82
|
+
h: img.height
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.prompt
|
87
|
+
TTY::Prompt.new(active_color: :cyan)
|
88
|
+
end
|
89
|
+
# =========================================================
|
90
|
+
end
|
91
|
+
# =========================================================
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module SpriteSheetCombine
|
5
|
+
def self.run!(args = [])
|
6
|
+
img_name = if args.empty?
|
7
|
+
prompt.ask('New File Name? (e.g. rawr): ')
|
8
|
+
else
|
9
|
+
args.shift
|
10
|
+
end
|
11
|
+
|
12
|
+
puts <<~HELP
|
13
|
+
Usage [size] [filter = Lanczos2]
|
14
|
+
- Run in the directory you wish to modify the images
|
15
|
+
- Resizes the images via MiniMagick
|
16
|
+
- Each image sizing values scaled by (value / 100)
|
17
|
+
|
18
|
+
|
19
|
+
Image Target: #{img_name}
|
20
|
+
Current Directory;
|
21
|
+
#{Dir.pwd.pastel(:yellow)}
|
22
|
+
|
23
|
+
Images:
|
24
|
+
HELP
|
25
|
+
|
26
|
+
images.each do |img|
|
27
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
28
|
+
puts " - #{img_s}"
|
29
|
+
end
|
30
|
+
puts
|
31
|
+
|
32
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Combine?'"
|
33
|
+
|
34
|
+
process(img_name)
|
35
|
+
rescue TTY::Reader::InputInterrupt
|
36
|
+
exit 0
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.process(img_name)
|
40
|
+
LogBot.info('Image Spritesheet', img_name)
|
41
|
+
|
42
|
+
img = dimensions(images.first)
|
43
|
+
img_name += '.png'
|
44
|
+
|
45
|
+
montage = MiniMagick::Tool::Montage.new
|
46
|
+
images.each do |imgn|
|
47
|
+
montage << imgn
|
48
|
+
end
|
49
|
+
|
50
|
+
montage.geometry "#{img.w}x#{img.h}+0+0"
|
51
|
+
montage.background 'none'
|
52
|
+
montage << "#{Dir.pwd}/#{img_name}"
|
53
|
+
|
54
|
+
montage.call
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.dimensions(file)
|
58
|
+
img = MiniMagick::Image.open(file)
|
59
|
+
|
60
|
+
{
|
61
|
+
w: img.width,
|
62
|
+
h: img.height
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.images
|
67
|
+
@images ||= sorted_images
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.sorted_images
|
71
|
+
numbers = Dir["#{Dir.pwd}/*.png"].map do |x|
|
72
|
+
File.basename(x, '.png').to_i
|
73
|
+
end
|
74
|
+
|
75
|
+
numbers.sort.map { |x| "#{x}.png" }
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.prompt
|
79
|
+
TTY::Prompt.new(active_color: :cyan)
|
80
|
+
end
|
81
|
+
# =========================================================
|
82
|
+
end
|
83
|
+
# =========================================================
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module Trim
|
5
|
+
def self.run!(_args = [])
|
6
|
+
puts <<~HELP
|
7
|
+
Usage
|
8
|
+
- Run in the directory you wish to modify the images
|
9
|
+
- Trim/Repage the images via MiniMagick
|
10
|
+
#{' '}
|
11
|
+
Current Directory;
|
12
|
+
#{Dir.pwd.pastel(:yellow)}
|
13
|
+
|
14
|
+
Images:
|
15
|
+
HELP
|
16
|
+
|
17
|
+
images.sort.each do |img|
|
18
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
19
|
+
puts " - #{img_s}"
|
20
|
+
end
|
21
|
+
puts
|
22
|
+
|
23
|
+
unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Scale Images!? #{'(Destructive)'.pastel(:red)}"
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
start
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.start
|
31
|
+
images.each do |img|
|
32
|
+
process(img)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.process(file)
|
37
|
+
image = MiniMagick::Image.open(file)
|
38
|
+
|
39
|
+
LogBot.info('Image Trim', File.basename(file).to_s)
|
40
|
+
image.trim
|
41
|
+
image.repage
|
42
|
+
image.write output_file
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.images
|
46
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.prompt
|
50
|
+
TTY::Prompt.new(active_color: :cyan)
|
51
|
+
end
|
52
|
+
# =========================================================
|
53
|
+
end
|
54
|
+
# =========================================================
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module White
|
5
|
+
def self.run!(_args = [])
|
6
|
+
puts <<~HELP
|
7
|
+
Usage
|
8
|
+
- Run in the directory you wish to modify the images
|
9
|
+
- Changes the colorspace to 100% white via MiniMagick
|
10
|
+
|
11
|
+
Current Directory;
|
12
|
+
#{Dir.pwd.pastel(:yellow)}
|
13
|
+
|
14
|
+
Images:
|
15
|
+
HELP
|
16
|
+
|
17
|
+
images.sort.each do |img|
|
18
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
19
|
+
puts " - #{img_s}"
|
20
|
+
end
|
21
|
+
puts
|
22
|
+
|
23
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} All White!? #{'(Destructive)'.pastel(:red)}"
|
24
|
+
|
25
|
+
start
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.start
|
29
|
+
images.each do |img|
|
30
|
+
LogBot.info('Image White', img)
|
31
|
+
process(img)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.process(file)
|
36
|
+
convert = MiniMagick::Tool::Convert.new
|
37
|
+
convert << file
|
38
|
+
convert.colorspace('sRGB')
|
39
|
+
convert.fill('white')
|
40
|
+
convert.colorize(100)
|
41
|
+
convert << file
|
42
|
+
convert.call
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.images
|
46
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.prompt
|
50
|
+
TTY::Prompt.new(active_color: :cyan)
|
51
|
+
end
|
52
|
+
# =========================================================
|
53
|
+
end
|
54
|
+
# =========================================================
|
55
|
+
end
|
56
|
+
end
|