เครื่องมือเหล่านี้ไม่ตรงตามความต้องการของฉันดังนั้นฉันจึงเขียนเครื่องมือที่ใช้ไลบรารีภาพขนาดเล็กของ Mark Tylers mtpixel (ปัจจุบันเป็นส่วนหนึ่งของmtcelledit ) มันไม่ได้กว้างขวางมาก แต่สามารถขยายได้อย่างง่ายดายผ่านฟังก์ชั่นในตัวของ mtpixel ซึ่งรวมถึง: โทนสีเทา, การกลับสี , การหมุน, เหลา, หาขนาด, โปสเตอร์, พลิก (แนวตั้งและแนวนอน), การแปลง, rgb-> จัดทำดัชนี, จัดทำดัชนี -> rgb, การตรวจจับขอบ, ลายนูน, รูปหลายเหลี่ยม, ข้อความและอื่น ๆ
สิ่งที่คุณทำคือส่งชุดรูปภาพเป็น args (รองรับ png, gif และ jpeg) และจะส่งออก rgb png ที่เรียกว่า sprite.png พร้อมกับข้อมูลการแบ่งส่วนภาพที่มีประโยชน์ไปยัง stdout ฉันใช้มันในสคริปต์ bash เพื่อขยายไดเร็กทอรีรูปภาพทั้งหมดและส่งออกข้อมูลการแบ่งส่วนสำหรับการสร้าง css โดยอัตโนมัติ (ด้วยความหวังว่าในที่สุดจะสามารถแทนที่แท็ก img ที่มีอยู่โดยอัตโนมัติด้วย sed / awk สร้างสรรค์เล็กน้อย)
แพ็คเกจไบนารีสำหรับลินุกซ์ลูกสุนัขจะอยู่ที่นี่:
http://murga-linux.com/puppy/viewtopic.php?t=82009
กรณีการใช้งานของฉันต้องการเพียงการต่อภาพในแนวตั้งลงใน png ใหม่นั่นคือทั้งหมดที่ทำ แต่ซอร์สโค้ดของฉันเป็นโดเมนสาธารณะและไลบรารี mtcelledit คือ gpl3 ด้วยการเชื่อมโยงแบบคงที่ mtpixel ไบนารีจะ <100kb (มีเพียงไม่กี่ kb เมื่อเชื่อมโยงแบบไดนามิก) และการอ้างอิงอื่น ๆ เท่านั้นคือ 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;
}