drakkon 0.0.7 → 0.0.10
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/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
|