Как сделать GIF из круговых замаскированных изображений? - PullRequest
5 голосов
/ 24 октября 2019

Загрузить Zip с изображениями

У меня есть папка с круглыми масками PNG:

enter image description here enter image description here enter image description here

Обычно я использую этот код для создания GIF-файлов:

import imageio
import os

imglist = []
images = []
path = ('\\').join(__file__.split('\\')[:-1]) + '\\' + 'images\\'
for r, _, f in os.walk(path):
    for i in f:
        imglist.append(r + i)

for filename in imglist:
    if filename.endswith('.png'):
        images.append(imageio.imread(filename))

frames_per_second = 24
gifpath = ('\\').join(__file__.split('\\')[:-1]) + '\\' + 'GIF.gif'
imageio.mimsave(gifpath, images, duration = 1/frames_per_second)

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

enter image description here

Есть идеи, как сделать круговой GIF?

1 Ответ

1 голос
/ 28 октября 2019

Ваши png-файлы используют прозрачность, так как это правда, что GIF поддерживает прозрачность, это не относится к библиотеке imageio.

Если все в порядке, когда замаскированная область имеет белый цвет, вы можетесделай это внутри своей петли. Просто замените:

for filename in imglist:
if filename.endswith('.png'):
    images.append(imageio.imread(filename))

на:

for filename in imglist:
if filename.endswith('.png'):
    tmp_image = imageio.imread(filename)
    mask = (tmp_image[:,:,3] == 0) #where transparency channel is 0
    tmp_image[mask] = [255,255,255,255] #Set those pixels to white (other color if you prefer)
    images.append(tmp_image)

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

Я бы также рекомендовал немного узнать, как сделать gif напрямую с помощью ffmpeg. Поначалу это немного сложно понять, но это то, что все библиотеки видео / gif используют за кулисами.

Бест, р.

...