Python3.4 皮尔
我结合了100+16x16瓷砖一起随机生成一个测试应用程序的地形,并保存为存储.png文件
我在测试时担心的是我会收到以下完成时间:
对于移动/桌面应用程序,这太长。有没有更理想的方法来创建这些地图
注:我不打算使用任何其他以外的16x16瓷砖。不过,我对其他Python模块持开放态度
from datetime import datetime
from os import listdir, chdir
from random import randint
from time import strftime
from PIL import Image
x_size = 4800
y_size = 4800
x_tile_size = 16
y_tile_size = 16
x_tile_amount = int(x_size/x_tile_size)
y_tile_amount = int(y_size/y_tile_size)
new_im = Image.new('RGB', (x_size, y_size))
file_path = './assets/terrain/plains/'
print("Generating map.")
start_time = strftime("%H:%M:%S")
for i in range(x_tile_amount):
for j in range(y_tile_amount):
dice_roll = randint(1,7)
if dice_roll == 1:
terrain_file_path = 'grass_1.png'
elif dice_roll == 2:
terrain_file_path = 'grass_2.png'
elif dice_roll == 3:
terrain_file_path = 'grass_3.png'
elif dice_roll == 4:
terrain_file_path = 'grass_4.png'
elif dice_roll == 5:
terrain_file_path = 'white_flower.png'
elif dice_roll == 6:
terrain_file_path = 'red_flower.png'
elif dice_roll == 7:
terrain_file_path = 'blue_flower.png'
old_im = Image.open(file_path + terrain_file_path)
new_im.paste(old_im, (i*x_tile_size,j*y_tile_size))
end_time = strftime("%H:%M:%S")
t_format = "%H:%M:%S"
t_delta = datetime.strptime(end_time, t_format) - datetime.strptime(start_time, t_format)
print('Time to generate map = ' + str(t_delta))
new_im.save('pillow_test.png', 'PNG')
您正在打开新图像n^2次。这使得它非常慢
在执行for循环之前,应该先预加载这些图像
你可以做的另一件事是把你的照片设置成dict
那你就这么做吧
试试看这是否对你的时间有帮助
主要的问题是,当你生成一张100x100的地图时,你要加载10000次图像。没有理由加载相同的7个图像文件10k次,所以您只需预加载它们并根据需要添加
您正在为每个随机选择加载每个地形图像。最好先预加载所有图像,然后简单地使用
random.choice()
为您选择一个图像,如下所示:这种方法应该给你一个巨大的速度
相关问题 更多 >
编程相关推荐