Ни один из этих инструментов не соответствовал моим требованиям, поэтому я написал тот, который использует крошечную библиотеку изображений Марка Тайлерса, mtpixel (теперь часть mtcelledit ). Она не очень обширная, но ее легко расширять с помощью встроенных функций mtpixel, которые включают: шкалу серого, инверсию цвета. , вращение, резкость, квантование, постеризация, отражение (по вертикали и горизонтали), преобразование, rgb-> indexed, indexed-> rgb, определение краев, тиснение, рисование многоугольников, текста и многое другое.
Все, что вам нужно сделать, это передать ему набор изображений в виде аргументов (поддерживает png, gif и jpeg), и он выведет rgb png с именем sprite.png вместе с полезными данными нарезки изображений в стандартный вывод. Я использую его в сценариях bash для спрайтинга всего каталога изображений и вывода данных нарезки для автоматического создания css (с надеждой, что в конечном итоге он сможет автоматически заменить существующие теги img с помощью небольшого творческого sed / awk)
Бинарные пакеты для puppy linux будут здесь:
http://murga-linux.com/puppy/viewtopic.php?t=82009
Мой вариант использования требовал только вертикального сращивания изображений в новый png, так что это все, что он делает, но мой исходный код является общественным достоянием, а библиотека mtcelledit - gpl3. Со статически связанной mtpixel двоичный файл имеет размер <100 КБ (всего несколько КБ при динамической компоновке), а единственными другими зависимостями являются libpng, libjpeg и libgif (и freetype с официальным mtpixel, но мне не нужна текстовая поддержка, поэтому я закомментировал биты 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;
}