Nessuno di questi strumenti ha soddisfatto i miei requisiti, quindi ne ho scritto uno che utilizza la minuscola libreria di immagini di Mark Tylers, mtpixel (ora parte di mtcelledit ) Non è super esteso ma è facilmente estendibile attraverso le funzioni integrate di mtpixel che includono: scala di grigi, inversione di colore , rotazione, nitidezza, quantizzazione, posterizzazione, rotazione (verticale e orizzontale), trasformazione, rgb-> indicizzato, indicizzato-> rgb, rilevamento dei bordi, rilievo, disegno di poligoni, testo e altro.
Tutto quello che fai è passargli un set di immagini come args (supporta png, gif e jpeg) e produrrà un pg rgb chiamato sprite.png insieme all'utile immagine che taglia i dati su stdout. Lo uso negli script bash per velocizzare un'intera directory di immagini e generare i dati di slicing per la generazione automatica di CSS (con la speranza di renderlo in grado di sostituire automagicamente i tag img esistenti con un po 'di sed / awk creativo)
I pacchetti binari per Puppy Linux saranno qui:
http://murga-linux.com/puppy/viewtopic.php?t=82009
Il mio caso d'uso richiedeva solo di collegare le immagini verticalmente in un nuovo png, quindi è tutto ciò che fa, ma il mio codice sorgente è di dominio pubblico e la libreria mtcelledit è gpl3. Con mtpixel collegato staticamente, il binario è <100kb (solo pochi kb quando collegato dinamicamente) e le uniche altre dipendenze sono libpng, libjpeg e libgif (e il tipo di file con il mtpixel ufficiale, ma non avevo bisogno del supporto del testo, quindi ho commentato i bit di freetype nella build statica)
sentiti libero di modificare per le tue esigenze:
#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;
}