Изменить характеристики GIF - PullRequest
0 голосов
/ 05 марта 2019

Я написал код Python, который создает GIF из списка изображений. Для этого я использовал библиотеку python: imageio. Вот мой код:

def create_gif(files, gif_path):
"""Creates an animated gif from a list of figures

Args:
    files (list of str) : list of the files that are to be used for the gif creation.
        All files should have the same extension which should be either png or jpg
    gif_path (str) : path where the created gif is to be saved

Raise:
    ValueError: if the files given in argument don't have the proper 
        file extenion (".png" or ".jpeg" for the images in 'files',
        and ".gif" for 'gif_path')
"""
images = []

for image in files:

    # Make sure that the file is a ".png" or a ".jpeg" one
    if splitext(image)[-1] == ".png" or splitext(image)[-1] == ".jpeg":
        pass
    elif splitext(image)[-1] == "":
        image += ".png"
    else:
        raise ValueError("Wrong file extension ({})".format(image))
    # Reads the image with imageio and puts it into the images list
    images.append(imageio.imread(image))

# Mak sure that the file is a ".gif" one
if splitext(gif_path)[-1] == ".gif":    
    pass
elif splitext(gif_path)[-1] == "":
    gif_path += ".gif"
else:
    raise ValueError("Wrong file extension ({})".format(gif_path))

# imageio writes all the images in a .gif file at the gif_path   
imageio.mimsave(gif_path, images)

Когда я пытаюсь этот код со списком изображений, Gif создается правильно, но я не знаю, как изменить его параметры: Под этим я подразумеваю, что я хотел бы иметь возможность контролировать задержку между изображениями GIF, а также контролировать, сколько времени GIF работает.

Я попытался подарить свой gif с помощью модуля Image из PIL и изменить его информацию, но когда я сохранил его, мой gif превратился в мое первое изображение.

Не могли бы вы помочь мне понять, что я делаю неправильно?

вот код, который я запустил, чтобы попытаться изменить параметр gif:

# Try to change gif parameters
my_gif = Image.open(my_gif.name)
my_gif_info = my_gif.info
print(my_gif_info)
my_gif_info['loop'] = 65535
my_gif_info['duration'] = 100
print(my_gif.info)
my_gif.save('./generated_gif/my_third_gif.gif')

1 Ответ

0 голосов
/ 06 марта 2019

Вы можете просто передать оба параметра, цикл и длительность, в метод mimsave / mimwrite.

imageio.mimsave(gif_name, fileList, loop=4, duration = 0.3)

В следующий раз, когда вы захотите проверить, какие параметры можно использовать для формата, совместимого с imageio, вы можете просто использовать imageio.help ( имя формата ).

imageio.help("gif")

GIF-PIL - Статический и анимированный GIF (Подушка)

A format for reading and writing static and animated GIF, based
on Pillow.

Images read with this format are always RGBA. Currently,
the alpha channel is ignored when saving RGB images with this
format.

Parameters for reading
----------------------
None

Parameters for saving
---------------------
loop : int
    The number of iterations. Default 0 (meaning loop indefinitely).
duration : {float, list}
    The duration (in seconds) of each frame. Either specify one value
    that is used for all frames, or one value for each frame.
    Note that in the GIF format the duration/delay is expressed in
    hundredths of a second, which limits the precision of the duration.
fps : float
    The number of frames per second. If duration is not given, the
    duration for each frame is set to 1/fps. Default 10.
palettesize : int
    The number of colors to quantize the image to. Is rounded to
    the nearest power of two. Default 256.
subrectangles : bool
    If True, will try and optimize the GIF by storing only the
    rectangular parts of each frame that change with respect to the
    previous. Default False.
...