Font-To-Sketch / code /collage_langs.py
bkhmsi's picture
now supports any font
f265950
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)