Python 成像:从内存加载 jpeg

发布于 2024-12-26 02:42:26 字数 300 浏览 1 评论 0原文

问题是从内存加载 jpeg 编码的图像。

我从套接字收到一个字符串:

jpgdata = self.rfile.read(sz)

并且我知道这是 jpeg 编码的图像。

我需要解码它。 最愚蠢的解决方案是:

o = open("Output/1.jpg","wb")
o.write(jpgdata)
o.close()
dt = Image.open("Output/1.jpg")

问题是如何在内存中做同样的事情?

The problem is to load jpeg-encoded image from memory.

I receive a string from socket:

jpgdata = self.rfile.read(sz)

and I know that this is jpeg-encoded image.

I need to decode it.
The most stupid solution is:

o = open("Output/1.jpg","wb")
o.write(jpgdata)
o.close()
dt = Image.open("Output/1.jpg")

The question is how to do the same thing in-memory?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤城病女 2025-01-02 02:42:26

PIL 的 Image.open 对象接受任何类似文件的对象。这意味着您可以将 Image 数据包装在 StringIO 对象上,并将其传递给 Image.Open

from io import BytesIO
file_jpgdata = BytesIO(jpgdata)
dt = Image.open(file_jpgdata)

或者,尝试将 self.rfile 作为参数传递给 Image.open - 它可能也同样有效。 (对于 Python 3 - 对于 Python 2 使用 from cStringIO import StringIO as BytesIO

PIL's Image.open object accepts any file-like object. That means you can wrap your Image data on a StringIO object, and pass it to Image.Open

from io import BytesIO
file_jpgdata = BytesIO(jpgdata)
dt = Image.open(file_jpgdata)

Or, try just passing self.rfile as an argument to Image.open - it might work just as well. (That is for Python 3 - for Python 2 use from cStringIO import StringIO as BytesIO)

老娘不死你永远是小三 2025-01-02 02:42:26

使用 StringIO,以便 Image 可以像访问文件一样访问您的数据。

Use StringIO so Image can access your data as if it were a file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文