93 lines
2.4 KiB
Python
93 lines
2.4 KiB
Python
import Image
|
|
|
|
class TileReader:
|
|
def __init__(self, im, size):
|
|
self.im = im
|
|
self.size = size
|
|
|
|
def isEmpty(self, x, y):
|
|
# if x == y == 0:
|
|
# print "LOL"
|
|
x *= self.size
|
|
y *= self.size
|
|
for yo in range(self.size):
|
|
for xo in range(self.size):
|
|
try:
|
|
p = self.im.getpixel((x+xo, y+yo))
|
|
psum = sum(p)
|
|
if psum > 0 and p != (255, 0, 255): return False
|
|
except:
|
|
print self.size, x+xo, y+yo
|
|
return True
|
|
|
|
def getPoint(self, x, y):
|
|
return x*self.size, y*self.size
|
|
|
|
def getBox(self, x, y):
|
|
x0, y0 = self.getPoint(x, y)
|
|
x1, y1 = self.getPoint(x+1, y+1)
|
|
return x0,y0,x1,y1
|
|
|
|
|
|
def buildImage(listDef, blockImg, iconImg, terrainImg):
|
|
ss = [48, 16, 16]
|
|
ts = [TileReader(blockImg, ss[0]), TileReader(iconImg, ss[1]), TileReader(terrainImg, ss[2])]
|
|
ks = [int( 512 / x ) for x in ss]
|
|
ix = [-1, ks[1]*3*8 -1]
|
|
|
|
out = Image.new("RGBA", (512, 512), (0,0,0,0))
|
|
|
|
n = 0
|
|
map = {}
|
|
|
|
for yy in range(blockImg.size[1] / ss[0]):
|
|
for xx in range(16):#1 + (im.size[0]-1)/48):
|
|
if n >= len(listDef):
|
|
break
|
|
|
|
type,b,c,d,e = listDef[n]
|
|
ix[type] += 1
|
|
ii = ix[type]
|
|
|
|
x,y = xx, yy
|
|
if type == 1:
|
|
x = e%16
|
|
y = e/16
|
|
if c < 256: type = 2
|
|
|
|
sz= ss[type]
|
|
t = ts[type]
|
|
k = ks[type]
|
|
im =t.im
|
|
|
|
if not t.isEmpty(x, y):
|
|
box = t.getBox(x, y)
|
|
part = im.crop(box)
|
|
|
|
ppt = (sz*(ii%k), sz*(ii/k))
|
|
part.save("t/%s.png"%n)
|
|
out.paste(part, ppt)
|
|
n += 1
|
|
|
|
for y in range(out.size[1]):
|
|
for x in range(out.size[0]):
|
|
p = r,g,b,a = out.getpixel((x, y))
|
|
if p == (255,0,255,255):
|
|
out.putpixel((x, y), (0, 0, 0, 0))
|
|
return out
|
|
|
|
def run(listDef, fn):
|
|
im = Image.open(fn)
|
|
im2 = Image.open("items.png")
|
|
im3 = Image.open("terrain.png")
|
|
|
|
buildImage(listDef, im, im2, im3).save("genblocks.png")
|
|
|
|
"""
|
|
if __name__ == "__main__":
|
|
import sys
|
|
try: fn = sys.argv[1]
|
|
except: fn = "blocks_alpha.png"
|
|
|
|
# run(0, fn)
|
|
""" |