gpt4 book ai didi

python - 在 Pillow 2.2.2 或 2.3.0 中使用 webp 图像

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:23 25 4
gpt4 key购买 nike

我正在使用 pillow 2.2.2 版将 webp 图像转换为 jpeg 图像。 webp 图像存储在内存缓冲区中。我发现当我尝试打开 webp 图像时,它会导致内存泄漏,大量图像成为一个真正的问题。

def webp_to_jpeg(raw_img):
image = Image.open(StringIO.StringIO(raw_img))
buffer = StringIO.StringIO()
image.save(buffer, "JPEG")
return string_buffer.getvalue()

这种内存泄漏仅在我处理 webp 图像时发生。我尝试将枕头更新到 2.3.0 但是当我这样做时我根本无法读取 webp 图像并且我得到以下异常“WEBP 未知扩展”

最佳答案

这是 PILLOW 中的一个 webp 解码器错误(参见 here)。它在 2.4.0 版本中仍在泄漏内存

我找到的唯一解决方法是基于 python-webm .这个也泄漏内存,但你可以修复它:

在 encode.py 中,导入 libc free() 函数:

from ctypes import CDLL, c_void_p
libc = CDLL(find_library("c"))
libc.free.argtypes = (c_void_p,)
libc.free.restype = None

然后修改_decode()释放webp解码器.dll中分配的缓冲区:

def _decode(data, decode_func, pixel_sz):
bitmap = None
width = c_int(-1)
height = c_int(-1)
size = len(data)

bitmap_p = decode_func(str(data), size, width, height)
if bitmap_p is not None:
# Copy decoded data into a buffer
width = width.value
height = height.value
size = width * height * pixel_sz
bitmap = create_string_buffer(size)

memmove(bitmap, bitmap_p, size)

#Free the wepb decoder buffer!
libc.free(bitmap_p)

return (bytearray(bitmap), width, height)

转换 RGB webp 图像:

from webm import decode

def RGBwebp_to_jpeg(raw_img):
result = decode.DecodeRGB(raw_img)
if result is not None:
image = Image.frombuffer('RGB', (result.width, result.height), str(result.bitmap),'raw', 'RGB', 0, 1)

buffer = StringIO.StringIO()
image.save(buffer, "JPEG")
return buffer.getvalue()

关于python - 在 Pillow 2.2.2 或 2.3.0 中使用 webp 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590496/

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