local source=app.open(app.params.source) local src=Image(source.cels[1].image) local count=tonumber(app.params.grid or '4') local atlas=Image(count*32,count*32,ColorMode.RGB) for row=0,count-1 do for col=0,count-1 do local x0,y0=math.floor(col*src.width/count)+4,math.floor(row*src.height/count)+4 local side=math.min(math.floor((col+1)*src.width/count)-x0-4,math.floor((row+1)*src.height/count)-y0-4) local image=Image(side,side,ColorMode.RGB) image:drawImage(src,Point(-x0,-y0)) local tmp=Sprite(side,side,ColorMode.RGB) tmp.cels[1].image=image app.command.SpriteSize{ui=false,width=32,height=32,method='nearest-neighbor'} atlas:drawImage(tmp.cels[1].image,Point(col*32,row*32)) tmp:close() end end source:close() local out=Sprite(count*32,count*32,ColorMode.RGB) out.cels[1].image=atlas out:saveAs(app.params.output) out:close()