これらのツールはどれも私の要件を満たしていなかったため、Mark Tylersの小さな画像ライブラリmtpixel(現在はmtcelleditの一部)を使用するツールを作成しました)、回転、シャープ、量子化、ポスタライズ、反転(垂直および水平)、変換、rgb-> indexed、indexed-> rgb、エッジ検出、エンボス、ポリゴンの描画、テキストなど。
必要なのは、画像のセットをargs(png、gif、jpegをサポート)として渡し、sprite.pngと呼ばれるrgb pngと、有用な画像スライスデータをstdoutに出力することです。私はそれをbashスクリプトで使用して、イメージのディレクトリ全体を分割し、スライスデータを出力してcssを自動生成します(最終的には、既存のimgタグを少しクリエイティブなsed / awkで自動的に置き換えることができるようになることを期待しています)
puppy linuxのバイナリパッケージは次のとおりです。
http://murga-linux.com/puppy/viewtopic.php?t=82009
私のユースケースでは、画像を垂直方向に新しいpngに接合するだけでよいので、それだけですが、私のソースコードはパブリックドメインであり、mtcelleditライブラリはgpl3です。mtpixelが静的にリンクされている場合、バイナリは<100kb(動的にリンクされた場合は数kb)であり、その他の依存関係はlibpng、libjpeg、libgif(および公式のmtpixelのfreetypeのみ)ですが、テキストサポートは必要なかったため、静的ビルドのfreetypeビットをコメント化しました)
自分のニーズに合わせて自由に変更してください:
#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;
}