1

我正在使用 Pygame 在 Python 中制作一个程序,该程序会将图像加载到屏幕上,打开原始数据(例如,如果您将 jpg 作为文本文件打开,您会看到的字符),将一些随机字符放入数据,然后将其重新保存为 jpg 以再次加载到 pygame。这会产生一个看起来很酷的故障效果。

我对所需的故障没有任何问题,但我发现尽管放置了什么样的随机字符,对于某些图像,每次图像通过我的故障功能时,我最终都会在底部出现一个灰色条图片。我简化了我的函数,它所做的只是加载图像,将图像作为读取二进制文件打开(即使我在 Mac 上),保存原始数据字符串,根据该字符串编写一个新文件,然后加载该文件。该图像没有以任何方式故意出现故障,并且数据据说没有受到影响,但我仍然遇到了这个灰色条。

以下是相关代码:

def initializeScreen(x, y):
    pygame.display.set_mode((x,y))
    return pygame.display.get_surface()

def importImage(fileName):
    imgText = open(fileName, 'rb')
    imgTextStr = imgText.read()
    imgText.close()
    return imgTextStr

screenSurf = initializeScreen(800,600)
textOfImg = importImage('/Users/Amoeba/Desktop/GlitchDriving/Clouds.jpg')
newFile = open('/Users/Amoeba/Desktop/GlitchDriving/tempGlitchFile.jpg', 'wb')
newFile.write(textOfImg)
newimgSurf = pygame.image.load('/Users/Amoeba/Desktop/GlitchDriving/tempGlitchFile.jpg')
screenSurf.blit(newimgSurf, (0,0))
pygame.display.flip()

这是通过我的函数之前和之后的图像之一的示例:

在此处输入图像描述

值得注意的是,灰条的大小取决于图片。有些图片甚至通过我的功能明显没有改变,因为它们应该是。另外,如果我用预览之类的图像查看软件打开我的程序编写的新版本的jpg,灰色条不会出现。我怀疑这是 pygame 图像加载功能的一个怪癖,或者在我从 jpg 到字符串的转换中删除了一些奇怪的字符(或可能是空格),反之亦然。我确实比较了两个文本文件(一个带有灰色条,一个没有),在使用在线“差异查找器”时没有发现任何差异。

这是我在这里的第一篇文章,但我已经潜伏了几十次。任何帮助是极大的赞赏。

4

1 回答 1

0

您永远不会关闭您创建的文件对象open,因此可能并非所有数据都被写回(刷新)到您的新文件中。

在尝试再次读取文件之前关闭文件对象,或者在处理文件时更好地开始使用该with语句(它将为您关闭文件):

def importImage(fileName):
    with open(fileName, 'rb') as imgText:
        return imgText.read()

screenSurf = initializeScreen(800,600)
textOfImg = importImage(r'path/to/file')

with open(r'path/to/otherfile', 'wb') as newFile:
    newFile.write(textOfImg)

newimgSurf = pygame.image.load(r'path/to/otherfile')
screenSurf.blit(newimgSurf, (0,0))
pygame.display.flip()
于 2013-09-02T08:17:56.560 回答