这些工具都不符合我的要求,所以我写了一个使用 Mark Tylers 的微型图像库 mtpixel(现在是 mtcelledit 的一部分)
它不是超级广泛,但可以通过 mtpixel 的内置功能轻松扩展,包括:灰度、颜色反转、旋转、锐化、量化、分色、翻转(垂直和水平)、变换、rgb->indexed、indexed->rgb 、边缘检测、浮雕、绘制多边形、文本等。
你所做的只是将一组图像作为 args 传递给它(支持 png、gif 和 jpeg),它会输出一个名为 sprite.png 的 rgb png 以及有用的图像切片数据到标准输出。我在 bash 脚本中使用它来拆分整个图像目录并输出切片数据以自动生成 css(希望最终使其能够用一些创造性的 sed/awk 自动替换现有的 img 标签)
puppy linux 的二进制包将在这里:
http://murga-linux.com/puppy/viewtopic.php?t=82009
我的用例只需要将图像垂直拼接成一个新的 png,就这样,但我的源代码是公共领域的,mtcelledit 库是 gpl3。使用 mtpixel 静态链接,二进制文件
根据自己的需要随意修改:
#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;
}