Add mikunyan-image
This commit is contained in:
Executable
+55
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require 'mikunyan'
|
||||||
|
require 'mikunyan/decoders'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
opts = {:as_asset => false, :outputdir => nil}
|
||||||
|
arg = nil
|
||||||
|
i = 0
|
||||||
|
while i < ARGV.count
|
||||||
|
if ARGV[i].start_with?('-')
|
||||||
|
case ARGV[i]
|
||||||
|
when '--as-asset', '-a'
|
||||||
|
opts[:as_asset] = true
|
||||||
|
when '--outputdir', '-o'
|
||||||
|
i += 1
|
||||||
|
opts[:outputdir] = ARGV[i]
|
||||||
|
else
|
||||||
|
warn("Unknown option: #{ARGV[i]}")
|
||||||
|
end
|
||||||
|
else
|
||||||
|
arg = ARGV[i] unless arg
|
||||||
|
end
|
||||||
|
i += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
unless arg
|
||||||
|
warn("Input file is not specified")
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless File.file?(arg)
|
||||||
|
warn("File not found: #{arg}")
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
assets = []
|
||||||
|
|
||||||
|
if opts[:as_asset]
|
||||||
|
assets = [Mikunyan::Asset.file(arg, File.basename(arg, '.*'))]
|
||||||
|
else
|
||||||
|
assets = Mikunyan::AssetBundle.file(arg).assets
|
||||||
|
end
|
||||||
|
|
||||||
|
outdir = opts[:outputdir] || File.basename(arg, '.*')
|
||||||
|
FileUtils.mkpath(outdir)
|
||||||
|
|
||||||
|
assets.each do |asset|
|
||||||
|
asset.path_ids.select{|path_id| asset.object_type(path_id) == 'Texture2D'}.each do |path_id|
|
||||||
|
obj = asset.parse_object(path_id)
|
||||||
|
name = obj.m_Name.value
|
||||||
|
image = Mikunyan::ImageDecoder.decode_object(obj)
|
||||||
|
puts "#{outdir}/#{name}.png (#{image.width} x #{image.height})"
|
||||||
|
image.save("#{outdir}/#{name}.png") if image
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user