Tak satu pun dari alat ini memenuhi persyaratan saya, jadi saya menulis yang menggunakan pustaka gambar kecil Mark Tylers, mtpixel (sekarang bagian dari mtcelledit ) Ini tidak super luas tetapi mudah diperluas melalui fungsi bawaan mtpixel yang meliputi: abu-abu, inversi warna , rotasi, pertajam, kuantisasi, posterize, flip (vertikal dan horizontal), transform, rgb-> diindeks, diindeks-> rgb, deteksi tepi, emboss, gambar poligon, teks dan banyak lagi.
Yang Anda lakukan adalah mengopernya satu set gambar sebagai args (mendukung png, gif dan jpeg) dan itu akan menghasilkan png rgb yang disebut sprite.png bersama dengan data pengiris gambar yang berguna untuk stdout. Saya menggunakannya dalam skrip bash untuk membuat spritify seluruh direktori gambar dan mengeluarkan data slicing untuk pembuatan css otomatis (dengan harapan pada akhirnya membuatnya mampu mengganti tag img yang ada secara otomatis dengan sedikit kreatif sed / awk)
Paket biner untuk puppy linux ada di sini:
http://murga-linux.com/puppy/viewtopic.php?t=82009
Kasus penggunaan saya hanya perlu menyambungkan gambar secara vertikal ke png baru, jadi hanya itu yang terjadi, tetapi kode sumber saya adalah domain publik dan pustaka mtcelledit adalah gpl3. Dengan mtpixel yang terhubung secara statis, binernya <100kb (hanya beberapa kb ketika terhubung secara dinamis) dan satu-satunya dependensi lainnya adalah libpng, libjpeg dan libgif (dan freetype dengan mtpixel resmi, tetapi saya tidak memerlukan dukungan teks, jadi saya tidak memerlukan dukungan teks, jadi saya berkomentar bit freetype dalam build statis)
jangan ragu untuk memodifikasi untuk kebutuhan Anda sendiri:
#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;
}