drakkon 0.0.7 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/drakkon/build.rb +61 -4
- data/lib/drakkon/cli.rb +3 -1
- data/lib/drakkon/gem/bundle.rb +86 -17
- data/lib/drakkon/gem/cli.rb +2 -0
- data/lib/drakkon/gem/helpers/modules.rb +5 -0
- data/lib/drakkon/init.rb +23 -15
- data/lib/drakkon/lib/fonts/fonts.rb +88 -0
- data/lib/drakkon/lib/hub.rb +4 -3
- data/lib/drakkon/lib/images/biggest.rb +8 -6
- data/lib/drakkon/lib/images/bulk_rename.rb +1 -13
- data/lib/drakkon/lib/images/cli.rb +35 -19
- data/lib/drakkon/lib/images/compress.rb +60 -0
- data/lib/drakkon/lib/images/double.rb +77 -0
- data/lib/drakkon/lib/images/downcase_normalize.rb +70 -0
- data/lib/drakkon/lib/images/hue_modulation.rb +71 -0
- data/lib/drakkon/lib/images/index.rb +43 -20
- data/lib/drakkon/lib/images/layers.rb +55 -0
- data/lib/drakkon/lib/images/resize.rb +3 -2
- data/lib/drakkon/lib/images/split.rb +4 -4
- data/lib/drakkon/lib/images/spritesheet.rb +52 -13
- data/lib/drakkon/lib/images/text.rb +4 -1
- data/lib/drakkon/lib/images/trim.rb +7 -6
- data/lib/drakkon/lib/manifest.rb +24 -16
- data/lib/drakkon/lib/pastel.rb +1 -1
- data/lib/drakkon/lib/platform_compat.rb +27 -0
- data/lib/drakkon/lib/settings.rb +68 -5
- data/lib/drakkon/lib/sounds/sounds.rb +126 -0
- data/lib/drakkon/lib/utils/cli.rb +38 -0
- data/lib/drakkon/lib/utils/rename_normalize.rb +75 -0
- data/lib/drakkon/lib/version.rb +17 -2
- data/lib/drakkon/release.rb +1 -1
- data/lib/drakkon/run/commands/utils.rb +14 -0
- data/lib/drakkon/run/helpers.rb +15 -4
- data/lib/drakkon/run/reader_shim.rb +9 -5
- data/lib/drakkon/run/tty.rb +1 -1
- data/lib/drakkon/run.rb +6 -2
- data/lib/drakkon/skeleton/deploy.rb +4 -1
- data/lib/drakkon/web.rb +16 -44
- data/lib/drakkon.rb +10 -7
- metadata +32 -35
@@ -0,0 +1,60 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# Dirty Compression.. Bad Idea?
|
4
|
+
module Compress
|
5
|
+
def self.run!(_args = [])
|
6
|
+
puts <<~HELP
|
7
|
+
Usage
|
8
|
+
- Run in the directory you wish to modify the images
|
9
|
+
- Converts the Images to Webp and then back to PNG
|
10
|
+
Images:
|
11
|
+
HELP
|
12
|
+
|
13
|
+
images.sort.each do |img|
|
14
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
15
|
+
puts " - #{img_s}"
|
16
|
+
end
|
17
|
+
puts
|
18
|
+
|
19
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Compress!? #{'(Destructive)'.pastel(:red)}"
|
20
|
+
|
21
|
+
start
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.start
|
25
|
+
images.each do |img|
|
26
|
+
LogBot.info('Image Compress', img)
|
27
|
+
process(img)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.process(file)
|
32
|
+
basename = File.basename(file, '.png')
|
33
|
+
path = File.dirname(file)
|
34
|
+
|
35
|
+
# Write Webp
|
36
|
+
image = MiniMagick::Image.open(file)
|
37
|
+
image.format 'webp'
|
38
|
+
image.write "#{path}/#{basename}.webp"
|
39
|
+
|
40
|
+
# Write back to PNG
|
41
|
+
image = MiniMagick::Image.open("#{path}/#{basename}.webp")
|
42
|
+
image.format 'png'
|
43
|
+
image.write "#{path}/#{basename}.png"
|
44
|
+
|
45
|
+
# Delete Temp
|
46
|
+
FileUtils.rm("#{path}/#{basename}.webp")
|
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, interrupt: :exit)
|
55
|
+
end
|
56
|
+
# =========================================================
|
57
|
+
end
|
58
|
+
# =========================================================
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
module Double
|
5
|
+
def self.run!(args = [])
|
6
|
+
# Alpha
|
7
|
+
alpha = if args.empty?
|
8
|
+
prompt.ask('Amount of Doubled Alpha? (e.g. 0..1): ')
|
9
|
+
else
|
10
|
+
args.shift
|
11
|
+
end
|
12
|
+
LogBot.info('Double Image Alhpa', "Alpha: #{alpha}")
|
13
|
+
|
14
|
+
puts <<~HELP
|
15
|
+
Usage [alpha]
|
16
|
+
- Run in the directory you wish to modify the images
|
17
|
+
- Adds the layer onto itself with a alpha value via MiniMagick
|
18
|
+
Current Directory;
|
19
|
+
#{Dir.pwd.pastel(:yellow)}
|
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
|
+
unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Double Images!? #{'(Destructive)'.pastel(:red)}"
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
|
34
|
+
start(alpha)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.start(alpha)
|
38
|
+
images.each do |img|
|
39
|
+
double(img, alpha)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.double(file, alpha)
|
44
|
+
image = MiniMagick::Image.open(file)
|
45
|
+
|
46
|
+
LogBot.info('Image Double', "#{File.basename file}")
|
47
|
+
|
48
|
+
# Create a copy of the image for overlay
|
49
|
+
overlay = image.clone
|
50
|
+
|
51
|
+
# Apply alpha to the overlay
|
52
|
+
overlay = overlay.compose('Over') do |c|
|
53
|
+
c.gravity 'center' # Center the overlay
|
54
|
+
c.define "compose:args=1,0,0,#{alpha}" # Control the alpha
|
55
|
+
end
|
56
|
+
|
57
|
+
# Combine the original image and the overlay
|
58
|
+
result = image.composite(overlay) do |c|
|
59
|
+
c.gravity 'center' # Center the overlay on the original image
|
60
|
+
end
|
61
|
+
|
62
|
+
# Save the result
|
63
|
+
result.write(file)
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.images
|
67
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.prompt
|
71
|
+
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|
72
|
+
end
|
73
|
+
# =========================================================
|
74
|
+
end
|
75
|
+
# =========================================================
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# This downcases all the things
|
4
|
+
module DowncaseNormalize
|
5
|
+
def self.run!(_args = nil)
|
6
|
+
puts <<~HELP
|
7
|
+
- Run in the directory you wish to rename images
|
8
|
+
- Downcase
|
9
|
+
- Normalize
|
10
|
+
- To Underscores:
|
11
|
+
- Space
|
12
|
+
- Perentheses
|
13
|
+
- Dash
|
14
|
+
- Delete Final Chars
|
15
|
+
- If Underscore
|
16
|
+
Current Directory;
|
17
|
+
#{Dir.pwd.pastel(:yellow)}
|
18
|
+
|
19
|
+
Images:
|
20
|
+
HELP
|
21
|
+
|
22
|
+
images.each do |img|
|
23
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
24
|
+
puts " - #{img_s}"
|
25
|
+
end
|
26
|
+
puts
|
27
|
+
|
28
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Rename!? #{'(Destructive)'.pastel(:red)}"
|
29
|
+
|
30
|
+
start
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.start
|
34
|
+
images.each do |img|
|
35
|
+
process(img)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Image file name normalization. Downcase and replace spaces with underscore
|
40
|
+
def self.process(file)
|
41
|
+
new_name = File.basename(file).downcase.gsub(' ', '_').gsub('(', '_').gsub(')', '_').gsub('-', '_')
|
42
|
+
path = File.dirname(file)
|
43
|
+
|
44
|
+
# Remove Final Underscore last char of basename is an underscore
|
45
|
+
ext = File.extname(new_name)
|
46
|
+
basename = File.basename(new_name, ext)
|
47
|
+
if basename[-1] == '_' && basename.length > 1
|
48
|
+
new_name = basename[0..-2]
|
49
|
+
new_name += ext
|
50
|
+
end
|
51
|
+
|
52
|
+
# Skip if the same
|
53
|
+
return if new_name == File.basename(file)
|
54
|
+
|
55
|
+
LogBot.info('Image Downcase Normalize', "Old: #{File.basename(file)}, New: #{new_name}")
|
56
|
+
FileUtils.mv(file, "#{path}/#{new_name}")
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.images
|
60
|
+
Dir["#{Dir.pwd}/*.png"] + Dir["#{Dir.pwd}/*.PNG"]
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.prompt
|
64
|
+
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|
65
|
+
end
|
66
|
+
# =========================================================
|
67
|
+
end
|
68
|
+
# =========================================================
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
# https://www.imagemagick.org/Usage/color_mods/#modulate_hue
|
5
|
+
module HueModulate
|
6
|
+
def self.run!(args = [])
|
7
|
+
# Amount
|
8
|
+
amount = if args.empty?
|
9
|
+
puts 'Amount Syntax: brightness,saturation,hue'
|
10
|
+
prompt.ask('Amount? (0..200) 100 is no change: ')
|
11
|
+
else
|
12
|
+
args.shift
|
13
|
+
end
|
14
|
+
|
15
|
+
puts <<~HELP
|
16
|
+
Usage
|
17
|
+
- Run in the directory you wish to modify the images
|
18
|
+
- Hue Modulates images via MiniMagick
|
19
|
+
|
20
|
+
Hue Modulate Amount: #{amount}
|
21
|
+
Current Directory;
|
22
|
+
#{Dir.pwd.pastel(:yellow)}
|
23
|
+
|
24
|
+
Current Directory;
|
25
|
+
#{Dir.pwd.pastel(:yellow)}
|
26
|
+
|
27
|
+
Images:
|
28
|
+
HELP
|
29
|
+
|
30
|
+
images.sort.each do |img|
|
31
|
+
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
32
|
+
puts " - #{img_s}"
|
33
|
+
end
|
34
|
+
puts
|
35
|
+
|
36
|
+
unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Hue Modulate!? #{'(Destructive)'.pastel(:red)}"
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
start(amount)
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.start(amount)
|
44
|
+
images.each do |img|
|
45
|
+
LogBot.info('Image Mod', img)
|
46
|
+
process(img, amount)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.process(file, amount)
|
51
|
+
image = MiniMagick::Image.open(file)
|
52
|
+
|
53
|
+
image.combine_options do |c|
|
54
|
+
c.modulate "100,100,#{amount}"
|
55
|
+
end
|
56
|
+
|
57
|
+
image.write(file)
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.images
|
61
|
+
Dir["#{Dir.pwd}/**/*.png"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.prompt
|
65
|
+
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|
66
|
+
end
|
67
|
+
# =========================================================
|
68
|
+
end
|
69
|
+
# =========================================================
|
70
|
+
end
|
71
|
+
end
|
@@ -46,10 +46,13 @@ module Drakkon
|
|
46
46
|
def self.run!(force: false, dir: nil)
|
47
47
|
@context = dir || Dir.pwd
|
48
48
|
|
49
|
+
# Make Directory `app/drakkon` if it doesn't exist
|
50
|
+
FileUtils.mkdir_p('app/drakkon') unless File.directory?('app/drakkon')
|
51
|
+
|
49
52
|
# Create Directory if sprites directory is missing
|
50
53
|
FileUtils.mkdir_p(sprites_directory)
|
51
54
|
|
52
|
-
if Settings.config[:image_digest] == digest
|
55
|
+
if Settings.config[:image_digest] == digest && File.exist?("#{context}/app/drakkon/image_index.rb")
|
53
56
|
LogBot.info('Images Index', 'Nothing New')
|
54
57
|
return unless force
|
55
58
|
end
|
@@ -65,31 +68,49 @@ module Drakkon
|
|
65
68
|
check sprites_directory
|
66
69
|
end
|
67
70
|
|
71
|
+
# rubocop:disable Layout/HeredocIndentation
|
68
72
|
def self.result
|
69
73
|
<<~RB
|
70
74
|
module Drakkon
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
75
|
+
module Images
|
76
|
+
def self.index
|
77
|
+
#{index.inspect}
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.catalog
|
81
|
+
#{catalog.inspect}
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.catalog_dig(long)
|
85
|
+
catalog.dig(*long.split('/'))
|
86
|
+
end
|
87
|
+
|
88
|
+
# Return Path from Catalog
|
89
|
+
def self.find_sprite(path)
|
90
|
+
catalog.dig(*path.split('/')).values.map(&:path)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Return Path from Catalog
|
94
|
+
def self.find_anim(path)
|
95
|
+
catalog.dig(*path.split('/')).keys.map do |key|
|
96
|
+
"\#{path}/\#{key}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.sprites
|
101
|
+
#{sprites.inspect}
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.reset_all
|
105
|
+
#{all.inspect}.each do |sprite|
|
106
|
+
$gtk.reset_sprite "sprites/\#{sprite}.png"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
90
110
|
end
|
91
111
|
RB
|
92
112
|
end
|
113
|
+
# rubocop:enable Layout/HeredocIndentation
|
93
114
|
|
94
115
|
# Recursively Go through
|
95
116
|
def self.check(dir = nil)
|
@@ -164,6 +185,8 @@ module Drakkon
|
|
164
185
|
def self.process_animation(list = nil)
|
165
186
|
# Append all images to `all`
|
166
187
|
list.each do |file|
|
188
|
+
# Also store individual image
|
189
|
+
process file
|
167
190
|
all.push file.gsub(sprites_directory, '')[1..].gsub('.png', '')
|
168
191
|
end
|
169
192
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Drakkon
|
2
|
+
module Images
|
3
|
+
# General Image Index Helper
|
4
|
+
# convert -dispose Background "Background.psd" -layers coalesce "output.png"
|
5
|
+
module Layers
|
6
|
+
def self.run!(args = [])
|
7
|
+
# File Select
|
8
|
+
file = if args.empty?
|
9
|
+
prompt.select('File to split?', files, filter: true)
|
10
|
+
else
|
11
|
+
args.first
|
12
|
+
end
|
13
|
+
|
14
|
+
output = if args.empty?
|
15
|
+
prompt.ask('Output File Pattern? (e.g. output): ')
|
16
|
+
else
|
17
|
+
args.shift
|
18
|
+
end
|
19
|
+
|
20
|
+
puts <<~HELP
|
21
|
+
Usage
|
22
|
+
- Use image magick to split layers of input file. Specifically intially used for PSD files.
|
23
|
+
|
24
|
+
Input: #{file}
|
25
|
+
Output: #{output}
|
26
|
+
HELP
|
27
|
+
|
28
|
+
puts
|
29
|
+
|
30
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)}"
|
31
|
+
|
32
|
+
start(file, output)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.start(file, output)
|
36
|
+
MiniMagick::Tool::Convert.new do |convert|
|
37
|
+
convert.dispose 'Background'
|
38
|
+
convert << file
|
39
|
+
convert.layers 'coalesce'
|
40
|
+
convert << "#{output}.png"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.files
|
45
|
+
Dir["#{Dir.pwd}/*"]
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.prompt
|
49
|
+
TTY::Prompt.new(active_color: :cyan, interrupt: :exit)
|
50
|
+
end
|
51
|
+
# =========================================================
|
52
|
+
end
|
53
|
+
# =========================================================
|
54
|
+
end
|
55
|
+
end
|
@@ -5,7 +5,8 @@ module Drakkon
|
|
5
5
|
def self.run!(args = [])
|
6
6
|
# Sizing
|
7
7
|
size = if args.empty?
|
8
|
-
|
8
|
+
puts "Use '#{'!'.pastel(:bright_blue)}' to force the size"
|
9
|
+
prompt.ask('Target Size? (e.g. "200x200" or "64x64!"): ')
|
9
10
|
else
|
10
11
|
args.shift
|
11
12
|
end
|
@@ -24,7 +25,7 @@ module Drakkon
|
|
24
25
|
puts <<~HELP
|
25
26
|
Usage [size] [filter = Lanczos2]
|
26
27
|
- Run in the directory you wish to modify the images
|
27
|
-
- Resizes
|
28
|
+
- Resizes images via MiniMagick and will force the size (breaking aspect ratio)
|
28
29
|
- Sizes are #{'width'.pastel(:blue)} x #{'height'.pastel(:blue)}
|
29
30
|
- 200x200, 150,175, and etc
|
30
31
|
|
@@ -34,8 +34,9 @@ module Drakkon
|
|
34
34
|
args.shift
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
# Without Float it won't respect the exact sizing
|
38
|
+
width = sizing[:w] / columns.to_f
|
39
|
+
height = sizing[:h] / rows.to_f
|
39
40
|
|
40
41
|
puts <<~HELP
|
41
42
|
Usage [file]
|
@@ -55,8 +56,6 @@ module Drakkon
|
|
55
56
|
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Split!? #{'(Destructive)'.pastel(:red)}"
|
56
57
|
|
57
58
|
process(image, width, height)
|
58
|
-
rescue TTY::Reader::InputInterrupt
|
59
|
-
exit 0
|
60
59
|
end
|
61
60
|
|
62
61
|
def self.process(file, width, height)
|
@@ -65,6 +64,7 @@ module Drakkon
|
|
65
64
|
convert << file
|
66
65
|
convert.crop("#{width}x#{height}")
|
67
66
|
convert << file
|
67
|
+
|
68
68
|
convert.call
|
69
69
|
end
|
70
70
|
|
@@ -3,22 +3,31 @@ module Drakkon
|
|
3
3
|
# General Image Index Helper
|
4
4
|
module SpriteSheetCombine
|
5
5
|
def self.run!(args = [])
|
6
|
+
# All images exist?
|
7
|
+
unless images.all? { |x| File.exist?(x) } ||
|
8
|
+
LogBot.fatal('SpriteSheetCombine', 'Invalid Images - Files must be numbered. e.g. 1.png, 2.png, 3.png')
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
|
6
12
|
img_name = if args.empty?
|
7
13
|
prompt.ask('New File Name? (e.g. rawr): ')
|
8
14
|
else
|
9
15
|
args.shift
|
10
16
|
end
|
11
17
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
grid = if args.empty?
|
19
|
+
prompt.ask('Grid? (WxH: e.g. 1x1, blank will leave up to ImageMagick): ')
|
20
|
+
else
|
21
|
+
args.shift
|
22
|
+
end
|
17
23
|
|
24
|
+
# Safety
|
25
|
+
img_name ||= 'rawr'
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
puts <<~HELP
|
28
|
+
Usage
|
29
|
+
- Run in the directory you wish to modify the images
|
30
|
+
- Images must be numbered so that the spritesheet can be created correctly
|
22
31
|
|
23
32
|
Images:
|
24
33
|
HELP
|
@@ -27,34 +36,64 @@ module Drakkon
|
|
27
36
|
img_s = img.gsub("#{Dir.pwd}/", '').pastel(:yellow)
|
28
37
|
puts " - #{img_s}"
|
29
38
|
end
|
39
|
+
|
40
|
+
puts <<~OPTIONS
|
41
|
+
Image Target: #{img_name.inspect}, Grid: #{grid.inspect}
|
42
|
+
Current Directory;
|
43
|
+
#{Dir.pwd.pastel(:yellow)}
|
44
|
+
OPTIONS
|
45
|
+
|
30
46
|
puts
|
31
47
|
|
32
|
-
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Combine?
|
48
|
+
exit unless prompt.yes? "#{'Are you sure?'.pastel(:bright_yellow)} Combine?"
|
33
49
|
|
34
|
-
process(img_name)
|
50
|
+
process(img_name, grid)
|
35
51
|
rescue TTY::Reader::InputInterrupt
|
36
52
|
exit 0
|
37
53
|
end
|
38
54
|
|
39
|
-
def self.process(img_name)
|
55
|
+
def self.process(img_name, grid)
|
40
56
|
LogBot.info('Image Spritesheet', img_name)
|
41
57
|
|
42
|
-
|
58
|
+
# Find Largest
|
59
|
+
img = dimensions(images)
|
43
60
|
img_name += '.png'
|
44
61
|
|
62
|
+
LogBot.info('Image Spritesheet', "Dimensions: #{img[:w]}x#{img[:h]}")
|
63
|
+
|
45
64
|
montage = MiniMagick::Tool::Montage.new
|
46
65
|
images.each do |imgn|
|
47
66
|
montage << imgn
|
48
67
|
end
|
49
68
|
|
50
69
|
montage.geometry "#{img.w}x#{img.h}+0+0"
|
70
|
+
montage.tile grid unless grid.nil?
|
51
71
|
montage.background 'none'
|
52
72
|
montage << "#{Dir.pwd}/#{img_name}"
|
53
73
|
|
54
74
|
montage.call
|
55
75
|
end
|
56
76
|
|
57
|
-
def self.dimensions(
|
77
|
+
def self.dimensions(_file)
|
78
|
+
# img = MiniMagick::Image.open(file)
|
79
|
+
|
80
|
+
# {
|
81
|
+
# w: img.width,
|
82
|
+
# h: img.height
|
83
|
+
# }
|
84
|
+
|
85
|
+
index = images.map do |img|
|
86
|
+
image_size(img)
|
87
|
+
end
|
88
|
+
|
89
|
+
w = index.max_by(&:w).w
|
90
|
+
h = index.max_by(&:h).h
|
91
|
+
|
92
|
+
{ w: w, h: h }
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.image_size(file)
|
96
|
+
# LogBot.info('Image Biggest', file)
|
58
97
|
img = MiniMagick::Image.open(file)
|
59
98
|
|
60
99
|
{
|
@@ -29,6 +29,9 @@ module Drakkon
|
|
29
29
|
|
30
30
|
file.gsub!(/[^0-9A-Za-z.-]/, '_')
|
31
31
|
|
32
|
+
# Remove Dashes
|
33
|
+
file.gsub!(/-+/, '_')
|
34
|
+
|
32
35
|
font = if args.empty?
|
33
36
|
font_prompt
|
34
37
|
else
|
@@ -50,7 +53,7 @@ module Drakkon
|
|
50
53
|
|
51
54
|
puts
|
52
55
|
|
53
|
-
exit unless prompt.yes?
|
56
|
+
exit unless prompt.yes? 'Are you sure?'.pastel(:bright_yellow).to_s
|
54
57
|
|
55
58
|
generate(font: font, text: text, size: size, color: color, file: file)
|
56
59
|
rescue TTY::Reader::InputInterrupt
|
@@ -7,7 +7,7 @@ module Drakkon
|
|
7
7
|
Usage
|
8
8
|
- Run in the directory you wish to modify the images
|
9
9
|
- Trim/Repage the images via MiniMagick
|
10
|
-
|
10
|
+
|
11
11
|
Current Directory;
|
12
12
|
#{Dir.pwd.pastel(:yellow)}
|
13
13
|
|
@@ -34,12 +34,13 @@ module Drakkon
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.process(file)
|
37
|
-
image = MiniMagick::Image.open(file)
|
38
|
-
|
39
37
|
LogBot.info('Image Trim', File.basename(file).to_s)
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
MiniMagick::Tool::Convert.new do |convert|
|
39
|
+
convert << file
|
40
|
+
convert.trim
|
41
|
+
convert << '+repage'
|
42
|
+
convert << file
|
43
|
+
end
|
43
44
|
end
|
44
45
|
|
45
46
|
def self.images
|