所以我生成了这个网格,我希望该网格中的每个值代表一种颜色。 这是生成代码:
for row in self.grid:
for item in range(len(row)):
row[item] = random.randint(-10, 20)
例如,我有这个网格:
[1, -7, 20, 12, 6, 5, 11, -1, -3, 8]
[18, 10, 2, -3, -4, 5, 10, 12, 10, -6]
[11, 19, 8, 2, -8, 5, -4, -4, 16, 1]
[-7, -7, 11, 13, -6, -8, 0, 10, 14, 9]
[16, 16, 1, 8, -7, 19, 9, 20, 2, 2]
[-3, 2, 4, 16, 20, -4, -1, -10, 19, 4]
[9, -9, 11, 5, 7, -7, 5, 15, -1, -6]
[11, -5, -2, -9, 19, -7, 14, -3, -8, -8]
[1, 13, 19, 9, 13, 7, 9, 11, -3, 19]
[15, -3, -10, 13, 2, 6, -7, -8, -6, 15]
我希望每个值(即范围的一部分)对应于某种颜色。例如,1到5的范围是绿色。
之后将其导出为jpg图像,我认为获胜者将是PIL
,但我不确定如何继续。
答案 0 :(得分:3)
这是我认为可以满足您需求的实现。请注意,当图像以JPEG格式保存时,颜色会发生变化。
import random
from PIL import Image
COLOUR_MAP = {
range(-10, 0): (255, 0, 0),
range(0, 10): (0, 255, 0),
range(10, 21): (0, 0, 255)
}
def create_grid(n):
return [[random.randint(-10, 20) for _ in range(n)] for _ in range(n)]
def map_to_colour(x):
for r, c in COLOUR_MAP.items():
if x in r:
return c
else:
raise ValueError(x)
def map_values_to_colours(value_grid):
return [[map_to_colour(x) for x in row] for row in value_grid]
def draw_image_from_colour_grid(colour_grid):
im = Image.new(mode='RGB', size=(len(colour_grid), len(colour_grid[0])))
im.putdata([x for row in colour_grid for x in row])
im.show()
im.save('out.jpg', 'JPEG')
if __name__ == '__main__':
value_grid = create_grid(10)
colour_grid = map_values_to_colours(value_grid)
draw_image_from_colour_grid(colour_grid)
<强>输出强>
答案 1 :(得分:0)
您可以使用Image.putdata()
模块中的Pillow
方法:
from PIL import Image
grid = [
[1, -7, 20, 12, 6, 5, 11, -1, -3, 8],
[18, 10, 2, -3, -4, 5, 10, 12, 10, -6],
[11, 19, 8, 2, -8, 5, -4, -4, 16, 1],
[-7, -7, 11, 13, -6, -8, 0, 10, 14, 9],
[16, 16, 1, 8, -7, 19, 9, 20, 2, 2],
[-3, 2, 4, 16, 20, -4, -1, -10, 19, 4],
[9, -9, 11, 5, 7, -7, 5, 15, -1, -6],
[11, -5, -2, -9, 19, -7, 14, -3, -8, -8],
[1, 13, 19, 9, 13, 7, 9, 11, -3, 19],
[15, -3, -10, 13, 2, 6, -7, -8, -6, 15],
]
# record the number of rows and columns in the data
rows = len(grid)
cols = len(grid[1])
# create a new image, in the correct size
im = Image.new('RGB', (rows, cols))
# convert to RGB tuples - for now we're just showing an image of different shades of red.
grid = [(abs(x)*20, 0, 0) for row in grid for x in row]
# using putdata we apply the values in the tuples from top left to bottom right
im.putdata(grid)
im.save('example.jpg')