如何提高我的 gif 文件的分辨率?

how do i increase the resolution of my gif file?

当我尝试创建一个 gif 文件时,该文件已成功创建,但它正在像素化。因此,如果有人可以帮助我解决如何提高分辨率的问题。

.代码如下:-

import PIL
from PIL import Image
import NumPy as np

image_frames = []
days = np.arange(0, 12)

for i in days:
    new_frame = PIL.Image.open(
        r"C:\Users\Harsh Kotecha\PycharmProjects\pythonProject1\totalprecipplot" + "//" + str(i) + ".jpg"
    )
    image_frames.append(new_frame)

image_frames[0].save(
    "precipitation.gif",
    format="GIF",
    append_images=image_frames[1:],
    save_all="true",
    duration=800,
    loop=0,
    quality=100,
)

这是Gif文件:-

原图如下:-

image1

image2

iamge3

更新答案

现在您已经提供了一些图像,我开始尝试禁用抖动:

#!/usr/bin/env python3

from PIL import Image

# User editable values
method = Image.FASTOCTREE
colors = 250

# Load images precip-01.jpg through precip-12.jpg, quantize to common palette
imgs = []
for i in range(1,12):
    filename = f'precip-{i:02d}.jpg'
    print(f'Loading: {filename}')
    try:
       im = Image.open(filename)
       pImage = im.quantize(colors=colors, method=method, dither=0)
       imgs.append(pImage)
    except:
       print(f'ERROR: Unable to open {filename}')


imgs[0].save(
    "precipitation.gif",
    format="GIF",
    append_images=imgs[1:],
    save_all="true",
    duration=800,
    loop=0
)

原答案

您的原始图像是 JPEG,这意味着它们可能有数千种颜色 2。当您制作动画 GIF(甚至是静态 GIF)时,每个帧的调色板中只能有 256 种颜色。

这会产生几个问题:

  • 每一帧都有一个新的、不同的调色板与之一起存储,从而增加了 GIF 的大小(每个调色板为 0.75kB)

  • 为了使图像看起来尽可能接近原始颜色,颜色会抖动

  • 可以为几乎相同的帧选择不同的颜色,这意味着颜色在连续帧的不同阴影之间闪烁 - 可能导致 “闪烁” 像星星

如果你想学习 GIF,通过阅读 Anthony Thyssen 的精彩笔记,你可以学到 3,872 倍的知识here, here and here

您的图片遇到了第一个问题,因为它有 12 "每帧" 局部颜色 table 以及全局颜色 table 3。它也遇到了第二个问题——抖动。

为避免抖动,您可能需要执行以下某些操作:

  • 加载所有图像并将它们全部附加到一个 12x1 的怪物图像中,并找到所有颜色的最佳调色板。由于您所有的图像都非常相似,我认为您可以仅从第一张图像生成调色板而无需对所有 12 张图像进行蒙太奇 - 这样会更快

  • 现在对每个图像进行调色,禁用抖动并使用单个通用调色板

  • 保存您的调色板图像序列,从上面的第一步推入单个通用调色板


2:您可以使用 ImageMagick 计算图像中的颜色数,使用:

magick YOURIMAGE -format %k info: 

3:您可以使用 gifsicle 在 GIF 中看到颜色 tables 使用:

gifsicle -I YOURIMAGE.GIF