gpt4 book ai didi

python - PIL Image.save() 函数在 Blender python 中失败

转载 作者:行者123 更新时间:2023-11-28 22:51:44 25 4
gpt4 key购买 nike

我正在为 Blender 开发一个插件2.69.我在插件中使用 PIL 库的图像模块。

根据网上的说明,我先安装了PIL for Python33,然后将Python的site-packages文件夹复制到Blender的同一个文件夹中。

像 Image.open() 这样的函数可以工作,读取 Exif 数据的函数也是如此。

但是,下面的语句失败了,Blender 崩溃了。

img.save(outputFileName)

save()方法在PIL的Image.py模块中。以下是相关部分:

try:
import builtins
except ImportError:
import __builtin__
builtins = __builtin__
...
...
def save(self, fp, format=None, **params):
...
try:
# Following statement fails, and Blender crashes.
save_handler(self, fp, filename)
finally:
if close:
fp.close()

同样的语句在使用 Python 3.3 解释器(而不是 Blender 解释器)执行时有效。仅当图像格式为 PNG 时,此语句在 Blender 中也有效。它对所有其他格式(TIFF、PGM、JPEG 等)都失败(在 Blender 中)。

我做了一些挖掘,最近在 Pillow github repo 上报告了几个问题:(1) (2)

更有趣的是 this forum post从 2009 年开始,它报告了 Maya 的 python 解释器中完全相同的行为。

当发生这种情况时,我在 Blender 中没有得到堆栈跟踪,因为 Blender 只是崩溃了。我敢打赌它与 Maya python 帖子中的错误相同。

可能是什么导致了这个问题?除了使用其他图像转换方法之外,还有什么解决办法吗?

最佳答案

我还没有找到这个问题的确切原因,但我确实设法找到了解决方法。

不是使用 img.save() 直接写入文件,而是写入缓冲区。然后将缓冲区写入文件。这有效并且不会使 Blender 崩溃。

所以,与其这样写:

img.save(outputFileName)

这样写:

    from io import BytesIO
buffer = BytesIO()
img.save(buffer, format = "jpeg")
open(outputFileName, "wb").write(buffer.getvalue())

有关支持的格式,请查看 this link .

关于python - PIL Image.save() 函数在 Blender python 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com