Cómo recortar tiles con ImageMagick
ImageMagick es un conjunto de herramientas que te permiten procesar imágenes de muchas formas diferentes. Además, se usa a través de la linea de comandos lo que permite automatizar y procesar muchas imágenes a la vez.
Por ejemplo, algo que necesito hacer muy seguido es tomar una grilla de sprites y dividirla en archivos de imágenes individuales.
Las grillas (o tiles) son muy eficientes, pero no son nada prácticos a la hora de hacer pruebas o escoger imágenes para un juego.
Tomemos esta imagen como ejemplo:
La grilla tiene 4 columnas y 7 filas de imágenes, si queremos separar cada una de estas imágenes podemos ejecutar este comando:
convert SpriteSheet.png -crop 4x7@ +repage +adjoin resultado/imagen_%d.png
Y lo que vamos a obtener como resultado son varias imágenes como estas:
Evitando bordes
Hay un bug muy común a la hora de usar estas imágenes en un juego que requiere algo de atención:
Si usamos las imágenes del ejemplo anterior es probable que veamos un borde raro en cada imagen:
Esto es así porque en memoria de la placa de video las imágenes se almacenan de forma contigua, y las operaciones de suavizado suelen hacer que los píxeles de los bordes aparezcan recortados o como si se mezclaran entre sí.
La solución es muy simple, podemos usar otro comando de ImageMagick para agregar 2 píxeles transparentes al rededor de cada imagen y listo:
mogrify -bordercolor none -border 2 resultado/*
Con esto, los archivos deberían quedarnos de esta forma:
Es decir, un poco más grandes (20x20 píxeles), pero sin el defecto del borde cuando lo usamos dentro de un juego: