我需要使用 python 处理图像(应用过滤器和其他转换),然后使用 HTTP 将其提供给用户。现在,我正在使用 BaseHTTPServer 和 PIL。
问题是,PIL 不能直接写入文件流,所以我必须写入一个临时文件,然后读取这个文件,这样我就可以将它发送给服务的用户。
是否有任何可以将 JPEG 直接输出到 I/O(类文件)流的 python 图像处理库?有没有办法让 PIL 做到这一点?
我需要使用 python 处理图像(应用过滤器和其他转换),然后使用 HTTP 将其提供给用户。现在,我正在使用 BaseHTTPServer 和 PIL。
问题是,PIL 不能直接写入文件流,所以我必须写入一个临时文件,然后读取这个文件,这样我就可以将它发送给服务的用户。
是否有任何可以将 JPEG 直接输出到 I/O(类文件)流的 python 图像处理库?有没有办法让 PIL 做到这一点?
使用内存中的二进制文件对象io.BytesIO
:
from io import BytesIO
imagefile = BytesIO()
animage.save(imagefile, format='PNG')
imagedata = imagefile.getvalue()
这在 Python 2 和 Python 3 上都可用,因此应该是首选。
仅在 Python 2 上,您还可以使用内存文件对象模块StringIO
,或者它是更快的 C 编码等效项cStringIO
:
from cStringIO import StringIO
imagefile = StringIO() # writable object
# save to open filehandle, so specifying the expected format is required
animage.save(imagefile, format='PNG')
imagedata = imagefile.getvalue()
StringIO
/cStringIO
是相同原理的较旧的遗留实现。