Python - PIL - 图片丢失
我想用PIL这个库来制作一个像网格一样的图片布局。但是我发现我的代码只画出了第一列。有没有人能帮帮我?
def draw(self):
image=Image.new("RGB",((IMAGE_SIZE[0]+40)*5+40,(IMAGE_SIZE[1]+20)*CHILD_COUNT+20),(255,255,255))
paste_x=(-1)*IMAGE_SIZE[0]
paste_y=(-1)*IMAGE_SIZE[1]
i=0
for a range(5):
paste_x=paste_x+IMAGE_SIZE[0]+40
j=0
for b in range(4):
paste_y=paste_y+IMAGE_SIZE[1]+20
image.paste(Image.new("RGB",IMAGE_SIZE,(0,0,0)),(paste_x,paste_y))
j=j+1
i=i+1
out=NamedTemporaryFile(delete=False)
path=out.name
image.save(out, "PNG")
out.close()
print path
1 个回答
3
使用 itertools.product 可以方便地遍历行和列:
import tempfile
import Image
import itertools
COLUMNS=5
ROWS=5
VSEP=20
HSEP=40
IMAGE_SIZE=(100,100)
def draw():
image=Image.new("RGB",
((IMAGE_SIZE[0]+HSEP)*COLUMNS+HSEP,
(IMAGE_SIZE[1]+VSEP)*ROWS+VSEP),
(255,255,255))
for row,column in itertools.product(range(ROWS),range(COLUMNS)):
# print(row,column) # uncomment this to see what itertools.product does
paste_x=HSEP+column*(IMAGE_SIZE[0]+HSEP)
paste_y=VSEP+row*(IMAGE_SIZE[1]+VSEP)
image.paste(Image.new("RGB",IMAGE_SIZE,(0,0,0)),(paste_x,paste_y))
out=tempfile.NamedTemporaryFile(delete=False)
path=out.name
image.save(out, "PNG")
out.close()
print path
draw()
另外,尽量不要使用太多硬编码的数字。如果把数字放在变量里,那么你的代码就更容易修改,也能减少出错的可能性。
顺便说一下,我觉得你发的代码中的错误是你没有重置 paste_y
。在完成第一列后,paste_y
的值会一直增加,这样你就会把小图像粘贴到 image
的下边缘之外。
所以你可以通过把 paste_y=-IMAGE_SIZE[1]
移动到 j=0
之后来解决这个问题,但我还是更喜欢我上面展示的方法。