gpt4 book ai didi

python - 删除使用 imageio 或 PIL 创建的 GIF 中的空间插值或压缩

转载 作者:行者123 更新时间:2023-12-05 07:36:09 29 4
gpt4 key购买 nike

我正在尝试使用 imageio 创建 GIF。这相当简单;但是,图像质量很差。它们似乎是插值的。请参见下图。

我正在使用下面显示的代码创建 GIF。我已经尝试跟踪源代码中图像的生成方式,问题似乎来自 PIL。

from PIL import Image
import imageio
import numpy as np
import matplotlib.pyplot as plt

outdir = r"where/you/want/it/to/go.gif"
frames = np.round(100+20*np.random.randn(10, 40, 40)).astype(np.uint8)

# Create single gif frame with PIL
im = Image.fromarray(frames[0])
im.save(outdir)

# Create gif with imageio
imageio.mimsave(outdir, frames)

我想要一个看起来像我用 matplotlib 生成的顶部图像(无插值)的 GIF。底部的图像是使用 imageio 生成的单帧。

Image displayed with matplotlib with interpolation set to "none"

Image produced from PIL. Note what appears to be spatial interpolation

最佳答案

我试图重现该问题,但据我所知,ImageIO 或 Pillow 内部均未发生插值:

from PIL import Image
import imageio as iio
import numpy as np
import io

for _ in range(100):
expected_frames = np.round(100+20*np.random.randn(10, 40, 40)).astype(np.uint8)

# test writing with pillow
pil_buffer = io.BytesIO()
im = Image.fromarray(expected_frames[0])
gif_bytes = im.save(pil_buffer, format="GIF")
actual_pil = iio.v3.imread(pil_buffer, mode="L")
assert np.all(actual_pil == expected_frames[0])

# test writing with ImageIO
gif_bytes = iio.v3.imwrite("<bytes>", expected_frames, format="GIF")
actual_iio = iio.v3.imread(gif_bytes, index=None, mode="L")
assert np.all(actual_iio == expected_frames)

print("No roundtrip modified any pixels.")

所以我认为要么

  • Pillow 或 ImageIO 中可能存在已修复的错误(已 3 年)
  • 您用来显示第二张图片的工具/应用程序会在您放大图片时进行插值(因为该图片是 200x200 像素而不是 40x40 像素)

关于python - 删除使用 imageio 或 PIL 创建的 GIF 中的空间插值或压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49243732/

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