Попытка добавить текст к изображениям и сделать GIF с помощью PIL - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь сделать gif, используя png изображения, и мне нужно добавить некоторую информацию о данных.Я разместил код и изображение ниже.И я не знаю, что случилось и почему это не работает.Текст не отображается на изображении, а цвет изображения меняется.Что очень странно.Я не могу понять, что не так с этим.

import os
import sys
#import imageio as io
import re
from PIL import Image, ImageDraw, ImageFont
#####################################################################################################
#key to sort the file_names in order
numbers = re.compile(r'(\d+)')
def numericalSort(value):
    parts = numbers.split(value)
    parts[1::2] = map(int, parts[1::2])
    return parts
############################################################

file_names = sorted((fn for fn in os.listdir('.') if fn.startswith('fileName')), key = numericalSort)

######################################################################
def gen_frame(path,time=time, counter=None):
    im = Image.open(path)
    alpha = im.getchannel('A')

    # Convert the image into P mode but only use 255 colors in the palette out of 256
    im = im.convert('RGB').convert('P', palette=Image.ADAPTIVE, colors=255)

    width, height = im.size
    print im.size
    # Set all pixel values below 128 to 255 , and the rest to 0
    mask = Image.eval(alpha, lambda a: 255 if a <=20 else 0)

    # Paste the color of index 255 and use alpha as a mask
    im.paste(255, mask)

    # The transparency index is 255
    im.info['transparency'] = 255

    draw = ImageDraw.Draw(im)
    font = ImageFont.truetype(font = '/usr/share/fonts/truetype/DejaVuSans.ttf',size = 50,encoding="unic")
    draw.text((0.35*width,0.8*height),r"time =  %d"%time,fill=120,font = font )
    del draw
    # saving image
    return im
######################################################################
frames = []
counter  = 0
for filename in file_names:
    frames.append(gen_frame(filename,time=counter, counter=counter))
    counter += 1
######################################################################
name = os.path.basename(os.getcwd())
frames[0].save(name+"_timestep"+'.gif', save_all=True, append_images=frames[1::],loop = 5, duration = duration)

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

This is the initial image. Similar images need to be used. And this is what i get. instead of text on the image, the color of image is changed!

------- Обновление -----

Iудалось получить gif и исправить цвет с текстом (проблема была с настройкой прозрачности).Но сейчас у меня проблема с перекрывающимся текстом в GIF.Текст, который я рисую, перекрывается в разных кадрах.Я не знаю сейчас, как решить эту проблему.

enter image description here

...