在字典中存储和检索图像 - python

时间:2014-03-24 07:26:46

标签: python image-processing dictionary

任何人都可以告诉我如何在字典中存储图像,以及如何根据键值从字典中检索图像。

提前致谢!

2 个答案:

答案 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]