def render2(data): scale = 2.0 max_courses = 100 frequencies = { normalized(course['name']): course['watch_time'] for course in data['user_courses'] \ if course['watch_time'] > 0 } for course in data['category_courses']: name = normalized(course['name']) if name not in frequencies: frequencies[name] = 1 if len(frequencies) > max_courses: break mask = Image.open(img_dir + 'circle.png') width, height = mask.size mask = np.array( mask.resize((int(mask.size[0] / float(scale)), int(mask.size[1] / float(scale))))) wordcloud = WordCloud(scale=scale, background_color='white', width=int(width/float(scale)), height=int(width/float(scale)), margin=2, font_path=font_dir + 'msyhl.ttc', mask=mask) \ .generate_from_frequencies(frequencies).to_image() l, t = 42, 594 r, b = 1458, 2328 wordcloud = wordcloud.crop((l, t, r, b)) pos = l, t canvas = Image.open(img_dir + '2.png') canvas.paste(wordcloud, pos) printer(canvas, (800, 170), data['max_category'], 'msyh.ttc', 150) printer(canvas, (920, 400), '%3d' % data['max_cnt'], 'ELEPHNT.TTF', 120) return canvas