Keines dieser Tools erfüllte meine Anforderungen, daher habe ich eines geschrieben, das Mark Tylers winzige Bildbibliothek mtpixel (jetzt Teil von mtcelledit ) verwendet. Es ist nicht besonders umfangreich, aber es kann leicht durch die integrierten Funktionen von mtpixel erweitert werden, darunter: Graustufen, Farbumkehrung , Drehen, Schärfen, Quantisieren, Posterisieren, Spiegeln (vertikal und horizontal), Transformieren, RGB-> Indiziert, Indiziert-> RGB, Kantenerkennung, Prägen, Zeichnen von Polygonen, Text und mehr.
Alles, was Sie tun, ist, eine Reihe von Bildern als Argumente zu übergeben (unterstützt PNG, GIF und JPEG) und es wird ein RGB-PNG namens sprite.png zusammen mit den nützlichen Bildaufteilungsdaten an stdout ausgegeben. Ich verwende es in Bash-Skripten, um ein ganzes Verzeichnis von Bildern zu spritisieren und die Slicing-Daten für die automatische Generierung von CSS auszugeben (in der Hoffnung, dass es schließlich in der Lage ist, vorhandene img-Tags automatisch durch ein bisschen kreatives sed / awk zu ersetzen).
Binäre Pakete für Puppy Linux werden hier sein:
http://murga-linux.com/puppy/viewtopic.php?t=82009
In meinem Anwendungsfall mussten die Bilder nur vertikal in ein neues PNG gespleißt werden. Das ist alles, aber mein Quellcode ist gemeinfrei und die mtcelledit-Bibliothek ist gpl3. Wenn mtpixel statisch verknüpft ist, ist die Binärdatei <100 KB (bei dynamischer Verknüpfung nur wenige KB) und die einzigen anderen Abhängigkeiten sind libpng, libjpeg und libgif (und Freetype mit dem offiziellen mtpixel, aber ich brauchte keine Textunterstützung, also habe ich hat die Freetype-Bits im statischen Build auskommentiert)
Fühlen Sie sich frei, für Ihre eigenen Bedürfnisse zu ändern:
#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;
}