任何人都可以告诉我如何在字典中存储图像,以及如何根据键值从字典中检索图像。
提前致谢!
答案 0 :(得分:5)
最好将图像存储在文件中,然后使用文件名引用它们:
pictures = {'mary': '001.jpg', 'bob', '002.jpg'}
filename = pictures['mary']
with open(filename. 'rb') as f:
image = f.read()
也就是说,如果你想直接将图像存储在字典中,只需添加它们即可:
pictures = {}
with open('001.jpg', 'rb') as f:
image = f.read()
pictures['mary'] = image
图像并不特殊,它们只是数据。
答案 1 :(得分:0)
就个人而言,如果我不得不走这条路,我会将图像加载到变量中,然后将其作为值{key:value}添加到字典中,就像使用任何其他变量一样。如果您使用的是Pygame,则不需要将其作为文件加载,并且已经可以使用pygame.image.load(file)加载图像。
请注意:按照建议加载图像文件,特别是二进制JPEG格式是很棘手的。 Windows上的Python区分了文本和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动稍微改变。这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据。在读取和写入此类文件时要非常小心地使用二进制模式。
与字典中的图像一样,您甚至可以在字典中嵌入图像列表(以及键)。列表是通过在每个键内循环列表来轻松制作动画的一种方法。 {' KEY1' :[' value1',' value2',' value2']}
但请记住,一旦将变量打包在字典中,变量的值就不会改变并在字典中保持不变,除非您专门更新字典。只是更新字典之外的值,不会影响它在字典中放置时的原始值。
示例:(使用pygame,将图像加载到列表中,并将其嵌入字典中以便调用)
def load_image(file):
"""loads and prepares image from data directory"""
file = os.path.join(main_dir, 'data', file)
try:
surface = pygame.image.load(file)
except pygame.error:
raise SystemExit('Could not load image "%s" %s'%(file, pygame.get_error()))
return surface.convert()
def load_images(*files):
""" function to load a list of images through an *arg and return a list
of images"""
images = []
for file in files:
images.append(load_image(file))
return images
bomb_images = load_images('bomb.gif', 'bomb2.gif','bomb3.gif')
explosion_images = load_images('ex1.gif', 'ex2.gif', 'ex3.gif')
# now all the images are inside a list and you can pack them in a dictionary
image_dict = {'bomb' : bomb_images, 'explode' :explosion_images}
# to call the image would be the same as you call any value from the dict
bombs = image_dict['bomb']
image_ready_for_blit = bombs[0]
# changing the slice position allows animation loops [0]