local src=app.open(app.params.source) local img=Image(src.cels[1].image) local x0,y0,x1,y1=img.width,img.height,-1,-1 for p in img:pixels() do local c=p() if app.pixelColor.rgbaA(c)>=192 then p(app.pixelColor.rgba(app.pixelColor.rgbaR(c),app.pixelColor.rgbaG(c),app.pixelColor.rgbaB(c),255)) x0,y0,x1,y1=math.min(x0,p.x),math.min(y0,p.y),math.max(x1,p.x),math.max(y1,p.y) else p(0) end end local crop=Image(x1-x0+1,y1-y0+1,ColorMode.RGB) crop:drawImage(img,Point(-x0,-y0));src:close() src=Sprite(crop.width,crop.height,ColorMode.RGB) src.cels[1].image=crop local factor=math.min(40/src.width,tonumber(app.params.height)/src.height) local w,h=math.floor(src.width*factor+0.5),math.floor(src.height*factor+0.5) app.command.SpriteSize{ui=false,width=w,height=h,method='nearest-neighbor'} local frame=Image(48,64,ColorMode.RGB) frame:drawImage(src.cels[1].image,Point(math.floor((48-w)/2),61-h));src:close() -- Preserve the complete pose; an idle rectangle would erase its raised arms. local out=Sprite(48,64,ColorMode.RGB) out.cels[1].image=frame;out:saveAs(app.params.output) app.command.SpriteSize{ui=false,width=144,height=192,method='nearest-neighbor'} out:saveAs(app.params.preview);out:close()