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

时间:2019-04-22 22:48:00

标签: python python-3.x pygame

我正在设置此列表,其中加载了图像(图像是精灵)。我试图创建此循环,以重新缩放此列表中的所有图像。

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))

我期望调整图像大小,但是相反,它只是保持不变,我不确定该怎么做。

3 个答案:

答案 0 :(得分:2)

我不确定pygame本身,因为我从未使用过它,但是我认为问题是pygame.transform.smoothscale()不是 transformative -它不会改变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]

答案 1 :(得分:1)

pygame.transform.smoothscale()无法处理列表。
该方法缩放由参数传递的图像,并通过返回值返回新的缩放图像。返回值尚未重新分配给列表。

您必须循环执行:

要么:

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]

答案 2 :(得分:0)

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

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