Aucun de ces outils ne répondait à mes exigences, alors j'en ai écrit un qui utilise la minuscule bibliothèque d'images de Mark Tylers, mtpixel (qui fait maintenant partie de mtcell ) Ce n'est pas très complet mais il est facilement extensible grâce aux fonctions intégrées de mtpixel qui incluent: niveaux de gris, inversion des couleurs , rotation, netteté, quantification, postérisation, retournement (vertical et horizontal), transformation, rgb-> indexé, indexé-> rgb, détection de bord, gaufrage, dessin de polygones, texte et plus encore.
Tout ce que vous faites est de lui passer un ensemble d'images sous forme d'arguments (supports png, gif et jpeg) et il produira un png rgb appelé sprite.png avec les données utiles de découpage d'images vers stdout. Je l'utilise dans des scripts bash pour spritifier un répertoire entier d'images et générer les données de découpage pour la génération automatique de css (avec l'espoir de le rendre éventuellement capable de remplacer automatiquement les balises img existantes par un peu de sed / awk créatif)
Les packages binaires pour chiot linux seront ici:
http://murga-linux.com/puppy/viewtopic.php?t=82009
Mon cas d'utilisation ne nécessitait que l'épissage vertical des images dans un nouveau png, donc c'est tout ce qu'il fait, mais mon code source est du domaine public et la bibliothèque mtcelledit est gpl3. Avec mtpixel lié statiquement, le binaire est <100 kb (seulement quelques ko lorsqu'il est lié dynamiquement) et les seules autres dépendances sont libpng, libjpeg et libgif (et freetype avec le mtpixel officiel, mais je n'avais pas besoin du support de texte, donc je a commenté les bits freetype dans la construction statique)
n'hésitez pas à modifier pour vos propres besoins:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <mtpixel.h>
int main( int argc, char *argv[] ){
int i=0,height=0,width=0,y=0;
mtpixel_init();
mtImage *imglist[argc];
argc--;
do{ imglist[i] = mtpixel_image_load( argv[i+1] );
height+=imglist[i]->height;
if (imglist[i]->width > width) width=imglist[i]->width;
} while (++i < argc);
imglist[argc]=mtpixel_image_new_rgb(width,height);
imglist[argc]->palette.trans=0;
i=0;
do{ if (imglist[i]->type == MTPIXEL_IMAGE_INDEXED)
mtpixel_image_paste(imglist[argc],mtpixel_image_to_rgb(imglist[i]),mtpixel_brush_new(),0 ,y);
else mtpixel_image_paste(imglist[argc],imglist[i],mtpixel_brush_new(),0 ,y);
printf("name=%s;width=%d;height=%d;y_offset=%d\n",argv[i+1],imglist[i]->height,imglist[i]->width,y);
y+=imglist[i]->height;
mtpixel_image_destroy( imglist[i] );
}while (++i < argc);
mtpixel_image_save( imglist[argc], "sprite.png", MTPIXEL_FILE_TYPE_PNG, 5 );
mtpixel_quit();
return 0;
}