Không có công cụ nào trong số này đáp ứng yêu cầu của tôi, vì vậy tôi đã viết một công cụ sử dụng thư viện hình ảnh nhỏ của Mark Tylers, mtpixel (hiện là một phần của mtcelledit ) Nó không siêu rộng nhưng có thể dễ dàng mở rộng thông qua các chức năng được xây dựng của mtpixel bao gồm: thang độ xám, đảo ngược màu , xoay, làm sắc nét, định lượng, posterize, lật (dọc và ngang), biến đổi, rgb-> được lập chỉ mục, lập chỉ mục-> rgb, phát hiện cạnh, chạm nổi, vẽ đa giác, văn bản và nhiều hơn nữa.
Tất cả những gì bạn làm là truyền cho nó một tập hợp các hình ảnh dưới dạng args (hỗ trợ png, gif và jpeg) và nó sẽ xuất ra một pgb rgb có tên là sprite.png cùng với dữ liệu cắt ảnh hữu ích cho thiết bị xuất chuẩn. Tôi sử dụng nó trong các tập lệnh bash để ghi lại toàn bộ thư mục hình ảnh và xuất dữ liệu cắt để tạo css tự động (với hy vọng cuối cùng sẽ làm cho nó có khả năng thay thế các thẻ img hiện tại một cách tự động bằng một chút sed / awk sáng tạo)
Gói nhị phân cho con chó con linux sẽ ở đây:
http://murga-linux.com/puppy/viewtopic.php?t=82009
Trường hợp sử dụng của tôi chỉ yêu cầu ghép các hình ảnh theo chiều dọc vào một png mới, vì vậy đó là tất cả, nhưng mã nguồn của tôi là miền công cộng và thư viện mtcelledit là gpl3. Với mtpixel được liên kết tĩnh, nhị phân là <100kb (chỉ một vài kb khi được liên kết động) và chỉ có các phụ thuộc khác là libpng, libjpeg và libgif (và freetype với mtpixel chính thức, nhưng tôi không cần hỗ trợ văn bản, vì vậy tôi không cần hỗ trợ văn bản, vì vậy tôi không cần hỗ trợ văn bản đã nhận xét các bit freetype trong bản dựng tĩnh)
thoải mái sửa đổi cho nhu cầu của riêng bạn:
#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;
}