Generar sprites con Python y GIMP

Script en Python para generar sprites de iconos con el editor gráfico GIMP

A continuación os presentamos un script para generar sprites de iconos en GIMP. El script está codificado en Python.

Funciona en cualquier documento (PSD, etc) con un tamaño definido que será la dimensión del icono. En cada una de las capas se debe poner una imagen que representa el icono y con un nombre de capa determinado que luego se usará para definir los estilos CSS.

Para ejecutar el script dentro del editor gráfico GIMP (gratuito y de código abierto), tan solo hay que guardar este código en un archivo .py, por ejemplo sprites.py en la carpeta de Ubuntu: ~/.gimp-2.6/plug-ins (esto es dentro de nuestra home, por ejemplo, /home/miusuario/.gimp-2.6/plug-ins).

Luego reiniciamos el editor, abrimos el archivo donde tenemos las imágenes por capas y vamos al menú Python-Fu > SpriteTool > Generate Sprites

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from gimpfu import *

def to_sheet(image, drawable):
margin = 0
max_columns = 4

    css_output = ""
    col = 0
     row = 0

    number_of_layers = float(len(image.layers))
    sprite_x, sprite_y = image.width, image.height

    new_doc_width = max_columns * sprite_x + (max_columns - 1) * margin
    new_doc_height = math.ceil(number_of_layers  / max_columns) * sprite_y + ( math.ceil(number_of_layers  / max_columns) - 1) * margin

    image.resize(int(new_doc_width), int(new_doc_height), 0, 0)

    image.undo_group_start()

    # Move layers in sheet
    for layer in image.layers:
    if col > max_columns - 1:
    	col = 0
    	row += 1

    layerXPosition = layer.offsets[0]
    layerYPosition = layer.offsets[1]

    x = col * (sprite_x + margin);
    y = row * (sprite_y + margin);

        layer.set_offsets(x, y)
    col += 1
    	css_output += "\\n.icon-%(size_x)sx%(size_y)s-%(layer_name)s\\t{ background-position:  %(x_position)spx %(y_position)spx; }" % dict(size_x=sprite_x, size_y=sprite_y, layer_name = layer.name, x_position = ((-x) if (x != 0) else '0'), y_position = ((-y) if (y != 0) else '0') )

    image.undo_group_end()

    print css_output

if _name_ == '_main_':
register(
"redimensionar_imagen",
"Redimensionar imagen",
"Redimensionar imagen",
"",
"",
"2012",
"/Python-Fu/SpriteTool/Generate Sprites", "RGB*, GRAY*", [], [], to_sheet) main()