Font-To-Sketch / code /collage_langs.py
bkhmsi's picture
now supports any font
f265950
raw
history blame
No virus
2.55 kB
import os
import imageio
import numpy as np
from glob import glob
from tqdm import tqdm
from PIL import Image, ImageDraw, ImageFont
def create_image(size, text, font):
W, H = size
image = Image.new('L', size, 255)
draw = ImageDraw.Draw(image)
_, _, w, h = draw.textbbox((0, 0), text, font=font)
draw.text(((W-w)/2, (H-h)/2), text, font=font, fill=0)
return image
if __name__ == "__main__":
languages = ['arabic', 'greek', 'chinese', 'russian', 'tamil', 'english']
scripts = ['arabic', 'greek', 'chinese', 'cyrillic', 'tamil', 'latin']
concepts = ['panda', 'car', 'music', 'bird', 'star', 'cloud']
width, height = 160, 160
n_frames = 67
freeze = 5
text_height = 40
nx, ny = len(concepts), len(scripts)
collage = np.ones((n_frames*2+freeze-1, text_height+width*nx, height*ny)).astype(np.uint8)*255
savepath = "../images/languages.gif"
dirpath = "../examples/concepts"
font = ImageFont.truetype('data/fonts/latin/Roboto-Regular.ttf', 28)
for i in tqdm(range(ny)):
background = create_image((width, text_height), languages[i].capitalize(), font)
lang_image = np.asarray(background)
for idx in range(n_frames*2+freeze-1):
collage[idx, :text_height, i*width:(i+1)*width] = lang_image
for i, concept in tqdm(enumerate(concepts), total=len(concepts)):
for j, script in enumerate(scripts):
filepath = os.path.join(dirpath, concept, f"{script}.gif")
image = Image.open(filepath)
assert image.is_animated
image.seek(0)
frame = image.convert('L').copy()
frame = frame.resize((width,height))
for idx in range(freeze):
collage[idx, text_height+i*width:text_height+(i+1)*width,j*height:(j+1)*height] = np.asarray(frame)
for frame_idx in range(n_frames):
image.seek(frame_idx)
frame = image.convert('L').copy()
frame = frame.resize((width,height))
collage[idx, text_height+i*width:text_height+(i+1)*width,j*height:(j+1)*height] = np.asarray(frame)
idx += 1
for frame_idx in reversed(range(n_frames)):
image.seek(frame_idx)
frame = image.convert('L').copy()
frame = frame.resize((width,height))
collage[idx, text_height+i*width:text_height+(i+1)*width,j*height:(j+1)*height] = np.asarray(frame)
idx += 1
imageio.mimsave(savepath, collage)