#!/usr/bin/env python # Version 0.3 # GIMP plugin to export layers as Sprite for 2D games # 0.2: added automatic reverse of image layers # 0.3: added spacing between frames of the spritesheet from gimpfu import * import os gettext.install("gimp20-python", gimp.locale_directory, unicode=True) def python_sprite_detape(timg, tdrawable, invert_order, spacing, cnt_hor=8, cnt_vert=8): width = timg.width height = timg.height newwidth = (width - spacing * (cnt_hor + 1)) / cnt_hor newheight = (height - spacing * (cnt_vert + 1)) / cnt_vert frames = cnt_hor * cnt_vert for i in range(frames - 1): timg.add_layer(timg.layers[0].copy(0), i) for y in range(cnt_vert): for x in range(cnt_hor): layer_numb = x + (y * cnt_hor) if layer_numb >= len(timg.layers): break newx = x * newwidth + spacing * (x + 1) newy = y * newheight + spacing * (y + 1) timg.layers[layer_numb].set_offsets(-newx, -newy) timg.resize(newwidth, newheight, 0, 0) for y in range(cnt_vert): for x in range(cnt_hor): layer_numb = x + (y * cnt_hor) timg.layers[layer_numb].resize_to_image_size() if invert_order: pdb.script_fu_reverse_layers(timg, tdrawable) register( proc_name=("python_fu_sprite_detape"), blurb=("Make a tape of sprites into layers"), help=("Make a tape of sprites into layers"), author=("FedeX"), copyright=("Pheodor Tsapanas a.k.a. FedeX"), date=("2011"), label=("de-tape"), imagetypes=("*"), params=[ (PF_IMAGE, "timg", "Image", None), (PF_DRAWABLE, "tdrawable", "Drawable", None), (PF_BOOL, "invert_order", "Invert order", False ), (PF_INT, "spacing", "Spacing", 0 ), (PF_INT, "cnt_hor", "Sprites hor.",8 ), (PF_INT, "cnt_vert", "Sprites vert.", 8) ], results=[], function=(python_sprite_detape), menu=("/Image/Sprite"), domain=("gimp20-python", gimp.locale_directory) ) main()