当前位置: 首页 > 面试题库 >

PIL open()方法不适用于BytesIO

谢奕
2023-03-14
问题内容

由于某些原因,当我尝试从BytesIO流制作图像时,它无法识别该图像。这是我的代码:

from PIL import Image, ImageGrab
from io import BytesIO

i = ImageGrab.grab()
i.resize((1280, 720))
output = BytesIO()
i.save(output, format = "JPEG")
output.flush()
print(isinstance(Image.open(output), Image.Image))

以及它引发的错误的堆栈跟踪:

Traceback (most recent call last):
  File "C:/Users/Natecat/PycharmProjects/Python/test.py", line 9, in <module>
    print(isinstance(Image.open(output), Image.Image))
  File "C:\Python27\lib\site-packages\PIL\Image.py", line 2126, in open
    % (filename if filename else fp))
IOError: cannot identify image file <_io.BytesIO object at 0x02394DB0>

我正在使用PIL的Pillow实现。


问题答案:

将BytesIO视为文件对象,在完成图像写入后,文件的光标位于文件的末尾,因此当Image.open()尝试调用时output.read(),它将立即获得EOF。

您需要添加一个output.seek(0)经过之前outputImage.open()



 类似资料:
  • 您好,我正在尝试使用PostConstruct方法初始化字段,但在测试中,此方法不会填充bidiMap字段。 有没有办法模拟字段,它是的字段? 测试: 正在测试的类:

  • 起初,我在使用< code>writeAndFlush(...)直到我偶然发现了这个修复。现在,我已经可以使用< code>writeAndFlush(...)每个字符串都带有后缀/r/n。当我尝试发送< code>ByteBuf对象时,问题仍然存在。显然,我不能只在消息末尾添加/r/n。对此有什么解决办法吗? 如果有帮助,我将使用

  • 下面是我的自定义注释。 我想用“MyAnnoation”做点什么,所以我声明了和如下方法。 下面的服务被其他类“自动安装”。所以我认为这不是与AOP代理相关的问题。 下面的代码调用上面的服务 如果将注释到一个类,则会调用procedure(),但如果一个方法带有类似于上述代码的注释,则该方法不起作用。我希望它只使用方法。 我想解决什么?

  • 我最近开始缓存一个方法的结果。我使用@Cacheable和@CachePut来实现所需的功能。 但不知何故,save操作并没有更新findAll方法的缓存。以下是相同的代码段: 对于findAll方法的第一个调用,它将结果存储在“persons”缓存中,对于所有后续调用,它将返回相同的结果,即使在两者之间执行了save()操作。 我对缓存很陌生,所以任何关于这方面的建议都会很有帮助。 谢谢

  • 问题内容: 我尝试使用JLabel’s之后尝试在屏幕上绘制图像,现在正在尝试paintComponent方法。我在看不到任何结果并且该方法没有被调用之后尝试插入断点,并且什么也没有出现。我该怎么办?这是我的重要代码- ` 另外,如果有区别,我正在使用JFrame而不是JPanel或组件。 问题答案: 没有方法。您应该避免直接绘制到框架上,而应使用和覆盖其方法 您还应该使用@Override批注,如

  • 我对java“I get this error”不熟悉,找不到适合getText(String)方法JTextComponent的方法。getText(int,int)不适用(实际参数列表和形式参数列表长度不同)方法JTextComponent。getText()不适用 (Alt Enter显示提示)“当我试图运行我的程序时。请帮助。我做错了什么?