PyGame图像保存颜色失真

时间:2013-10-10 12:51:33

标签: python python-3.x pygame

所以我在我的游戏中实现了以下截图功能,只是为了记录进度和类似的东西。这是我的代码:

pygame.image.save(screen, save_file)

非常基本。我最近升级到python 3.3,并且因此使用此功能遇到了扭曲颜色的问题。这就是我的意思:

颜色扭曲: Distorted screen shot

所以它看起来很不错,但它不应该如何。这是实际图片:

Actual Image

这是一个已知问题还是只是我?是否有任何修复或目前它只是一个破碎的功能。我正在使用pygame 1.9.2pre,我假设它只是预发布的一个错误,但我在使用python 3.3的任何其他版本的pygame时遇到了问题。

2 个答案:

答案 0 :(得分:3)

Some users报告称将图像保存为pngs有困难:

  

即使我指定.png,我也只能获得.tga文件。非常令人沮丧。

     

如果使用.PNG(大写),则会导致文件无效(至少在我的win32上)。请改用.png(小写)。

     

PNG似乎不起作用,我可以在Thunar中预览它,但在其他任何地方它都说它不是有效的PNG。

以不同的格式保存可能会有所帮助。例如,BMP是一种简单的格式,因此Pygame的实现不太可能是错误的。

如果您真的想保存为PNG,可以通过将红色通道与绿色通道交换来扭转失真。这很容易。例如,使用PIL:

from PIL import Image
im = Image.open("screenshot.png")
width, height = im.size

pix = im.load()
for i in range(width):
    for j in range(height):
        r,g,b = pix[i,j]
        pix[i,j] = (g,r,b)

im.save("output.png")

或者您可以保存为BMP并在事实之后转换为PNG:

from PIL import Image
im = Image.open("screenshot.bmp")
im.save("screenshot.png")

答案 1 :(得分:0)

供以后参考,该技巧对我有用:

from PIL import Image
imgdata = pygame.surfarray.array3d(screen).transpose([1,0,2])[:,:,::-1]
Image.fromarray(imgdata).save('output.png')