如何调整列表中多个图像的大小?

2024-06-09 17:11:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我设置了这个列表,其中有图像(图像是精灵)加载。我试图创建一个循环,它将重新缩放列表中的所有图像。你知道吗

walkLeft = [pygame.image.load('Moving1.png'), pygame.image.load('Moving2.png'), pygame.image.load('Moving3.png'), pygame.image.load('Moving4.png'), pygame.image.load('Moving5.png'), pygame.image.load('Moving6.png'), pygame.image.load('Moving7.png'), pygame.image.load('Moving8.png'), pygame.image.load('Moving9.png')]
walkRight = []
for i in walkLeft:
    walkRight.append(pygame.transform.flip(i, True, False))

for x in walkLeft:
    pygame.transform.smoothscale(x,(372, 493))

我原以为图像的大小会被调整,但它只是保持不变,我不知道该怎么办。你知道吗


Tags: in图像image列表forpngtransformload
3条回答

我不确定pygame本身,因为我从来没有使用过它,但我认为问题是pygame.transform.smoothscale()不是变革性的x,它不会改变你输入它的x,而是输出一个修改过的版本而不修改原始版本。您可以在pygame.transform.flip(i, True, False))中看到类似的行为—每次迭代,它都会生成一个i的修改副本,您可以将其附加到walkRight,但它不会更改您开始使用的i。你知道吗

您可能希望这样做的方式是按索引而不是按元素进行迭代,并在执行时实际替换元素:

for i in range(len(walkLeft)):
    walkLeft[i] = pygame.transform.smoothscale(x, (372, 493))

您也可以跳过一个步骤,简单地使用列表理解重新创建整个列表,这将使您的脚本总体上更加习惯化:

walkLeft = [pygame.image.load('Moving1.png'), ...]
walkRight = [pygame.transform.flip(x, True, False) for x in walkLeft]
walkLeft = [pygame.transform.smoothscale(x, (372, 493)) for x in walkLeft]

^{}无法处理列表。
该方法缩放通过参数传递的图像,并根据返回值返回新的缩放图像。返回值已重新分配给列表。你知道吗

你必须循环进行:

或者:

for i in range(len(walkLeft)):
    walkLeft[i] = pygame.transform.smoothscale(walkLeft[i], (372, 493))

或在一行中:

walkLeft = [pygame.transform.smoothscale(x, (372, 493)) for x in walkLeft]

pygame.transform.smoothscale返回一个新对象,因此需要将其返回到一个值:

for x in range(len(walkLeft)):
    walkLeft[x] = pygame.transform.smoothscale(x,(372, 493))

相关问题 更多 >