Add mikunyan-image

This commit is contained in:
Ishotihadus
2018-01-16 00:44:26 +09:00
parent 9686bdca95
commit 9ba90f1bd5
+55
View File
@@ -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