Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- # Spritesheet Seperator/Combiner
- # Author: ForeverZer0
- # Date: 5.14.2011
- # Version: 1.0
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- #
- # Introduction:
- # This is a very basic script I wrote to help myself split up one of them big
- # icon sheets into individual files. After admiring its niftiness for a sec, I
- # realized someone else may get some use out of it as well, so here it is.
- #
- # Features:
- # - Extremely simple to use.
- # - Splits large icon/sprite sheets up into uniform images, then saves them as
- # individual files in a matter of seconds.
- # - Can seperate any image into pieces of any size.
- # - Combines many images of any size into one single file
- # - Lightweight and fast
- #
- # Instructions:
- # - Place script in new project or temporarily in an existing game anywhere
- # before "Main"
- # - Make any needed changes to the few configurations at the top of the script
- # - Run the game
- #
- # Credits:
- # - ForeverZer0, for the script
- #
- # Author's Notes:
- # - Report bugs/issues at www.chaos-project.com
- #
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- # BEGIN CONFIGURATION
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- MODE = 1
- # Select the mode to run in.
- # 0 = Split Image
- # 1 = Combine Images
- FOLDER_NAME = 'Images'
- # The folder name that the images will be placed into, or the folder where
- # the images are contained that will be combined.
- #---------------------------------
- # Image Splitting
- #---------------------------------
- SOURCE_FILE = 'test.png'
- # The name of the source file that will be split. Place in game directory.
- SPLIT_X = 24
- SPLIT_Y = 24
- # The width/height in pixels to split the image file into on each axis.
- BASE_NAME = 'icon'
- # The base name used for the output files.
- NAMING_TYPE = 1
- # Define the naming convention applied to the base name.
- # 0 = Numerically. (icon 1, icon 2, icon 3, etc, etc)
- # 1 = Coordinates. (icon 1x2, icon 3x4, icon 3x5, etc. etc)
- #---------------------------------
- # Image Combining
- #---------------------------------
- IMAGES_WIDE = 12
- # The number of images that will be placed per row
- FILENAME = 'combined'
- # The output filename
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- # END CONFIGURATION
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- module Zlib
- class Png_File < GzipWriter
- #-------------------------------------------------------------------------------
- def make_png(bitmap_Fx,mode)
- @mode = mode
- @bitmap_Fx = bitmap_Fx
- self.write(make_header)
- self.write(make_ihdr)
- self.write(make_idat)
- self.write(make_iend)
- end
- #-------------------------------------------------------------------------------
- def make_header
- return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
- end
- #-------------------------------------------------------------------------------
- def make_ihdr
- ih_size = [13].pack("N")
- ih_sign = "IHDR"
- ih_width = [@bitmap_Fx.width].pack("N")
- ih_height = [@bitmap_Fx.height].pack("N")
- ih_bit_depth = [8].pack("C")
- ih_color_type = [6].pack("C")
- ih_compression_method = [0].pack("C")
- ih_filter_method = [0].pack("C")
- ih_interlace_method = [0].pack("C")
- string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
- ih_compression_method + ih_filter_method + ih_interlace_method
- ih_crc = [Zlib.crc32(string)].pack("N")
- return ih_size + string + ih_crc
- end
- #-------------------------------------------------------------------------------
- def make_idat
- header = "\x49\x44\x41\x54"
- data = make_bitmap_data
- data = Zlib::Deflate.deflate(data, 8)
- crc = [Zlib.crc32(header + data)].pack("N")
- size = [data.length].pack("N")
- return size + header + data + crc
- end
- #-------------------------------------------------------------------------------
- def make_bitmap_data1
- w = @bitmap_Fx.width
- h = @bitmap_Fx.height
- data = []
- for y in 0...h
- data.push(0)
- for x in 0...w
- color = @bitmap_Fx.get_pixel(x, y)
- red = color.red
- green = color.green
- blue = color.blue
- alpha = color.alpha
- data.push(red)
- data.push(green)
- data.push(blue)
- data.push(alpha)
- end
- end
- return data.pack("C*")
- end
- #-------------------------------------------------------------------------------
- def make_bitmap_data
- gz = Zlib::GzipWriter.open('hoge.gz')
- t_Fx = 0
- w = @bitmap_Fx.width
- h = @bitmap_Fx.height
- data = []
- for y in 0...h
- data.push(0)
- for x in 0...w
- t_Fx += 1
- if t_Fx % 10000 == 0
- Graphics.update
- end
- if t_Fx % 100000 == 0
- s = data.pack("C*")
- gz.write(s)
- data.clear
- end
- color = @bitmap_Fx.get_pixel(x, y)
- red = color.red
- green = color.green
- blue = color.blue
- alpha = color.alpha
- data.push(red)
- data.push(green)
- data.push(blue)
- data.push(alpha)
- end
- end
- s = data.pack("C*")
- gz.write(s)
- gz.close
- data.clear
- gz = Zlib::GzipReader.open('hoge.gz')
- data = gz.read
- gz.close
- File.delete('hoge.gz')
- return data
- end
- #-------------------------------------------------------------------------------
- def make_iend
- ie_size = [0].pack("N")
- ie_sign = "IEND"
- ie_crc = [Zlib.crc32(ie_sign)].pack("N")
- return ie_size + ie_sign + ie_crc
- end
- end
- end
- #===============================================================================
- # ** Bitmap
- #===============================================================================
- class Bitmap
- def make_png(name="like", path="",mode=0)
- make_dir(path) if path != ""
- Zlib::Png_File.open("temp.gz") {|gz| gz.make_png(self, mode) }
- Zlib::GzipReader.open("temp.gz") {|gz| $read = gz.read }
- f = File.open(path + name + ".png","wb")
- f.write($read)
- f.close
- File.delete('temp.gz')
- end
- #-------------------------------------------------------------------------------
- def make_dir(path)
- dir = path.split("/")
- dir.each_index {|i|
- unless dir == "."
- add_dir = dir[0..i].join("/")
- begin
- Dir.mkdir(add_dir)
- rescue
- end
- end
- }
- end
- end
- #===============================================================================
- # Processing
- #===============================================================================
- time = Time.now
- if MODE == 0
- bitmap = Bitmap.new(SOURCE_FILE)
- count = 0
- (0...(bitmap.width / SPLIT_X)).each {|x| (0...(bitmap.height / SPLIT_Y)).each {|y|
- count += 1
- icon = Bitmap.new(SPLIT_X, SPLIT_Y)
- rect = Rect.new(x * SPLIT_X, y * SPLIT_Y, SPLIT_X, SPLIT_Y)
- icon.blt(0, 0, bitmap, rect)
- name = (BASE_NAME + (NAMING_TYPE == 0 ? " #{count}" : " #{x+1}x#{y+1}"))
- icon.make_png(name, FOLDER_NAME + '/')
- if count % 80 == 0
- Graphics.update
- end
- }}
- elsif MODE == 1
- images = Dir.entries(FOLDER_NAME) - ['.', '..']
- if images.empty?
- print("No image files found in #{FOLDERNAME} directory.")
- exit
- end
- images.collect! {|filename| Bitmap.new("#{FOLDER_NAME}/#{filename}") }
- w, h, num = images[0].width, images[0].height, images.size
- canvas = Bitmap.new(w * IMAGES_WIDE, (num.to_f / IMAGES_WIDE).ceil * h)
- images.each_with_index {|image, i|
- x, y = (i % IMAGES_WIDE) * w, (i / IMAGES_WIDE) * h
- canvas.blt(x, y, image, Rect.new(0, 0, w, h))
- if (i % 80) == 0
- Graphics.update
- end
- }
- canvas.make_png(FILENAME, '')
- end
- print ("Process Complete!\n" +
- "#{count} images converted in #{Time.now.to_f - time.to_f} seconds.")
- exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement