Как визуализировать эмоджи как изображения в Python под Windows? - PullRequest
0 голосов
/ 01 сентября 2018

Моя цель - создать (в Python под Windows) растровое изображение, отображающее любой символ Юникода, включая, в частности, смайлики. Я установил несколько удобных для эмодзи шрифтов (включая Symbola ) для тестирования.

До сих пор я пробовал PIL, matplotlib и pygame, но ни один из них не может сделать это под Windows (первые два, очевидно, могут сделать это на некоторых версиях Linux / MacOS, в то время как pygame явно ограничена символами до до 0xffff, что исключает смайлики).

Я обнаружил, что reportlab может генерировать PDF-файл с смайликами (хотя его растровое средство визуализации не может их правильно отобразить), но мне все еще нужно найти способ извлечь символ смайлика из PDF-файла и преобразовать его в растровое изображение. Я чувствую, что должен быть более простой способ ...

Примечание: этот вопрос относится к Рендеринг Emoji с PIL , но я не обязательно хочу использовать PIL, если другая библиотека может выполнить эту работу

1 Ответ

0 голосов
/ 01 сентября 2018

В конце концов я нашел решение в Есть ли какая-нибудь хорошая библиотека python для генерации и рендеринга текста в формате изображения? . Хотя он основан на стороннем исполняемом файле, как уже упоминалось, его легко переносить в Python.

Точные шаги были следующими:

  1. Установить ImageMagick из https://www.imagemagick.org/script/download.php#windows
  2. Установить переменную среды MAGICK_HOME в папку установки
  3. Установите подушку, чтобы можно было легко манипулировать полученным изображением в Python (conda install pillow)
  4. Загрузите и установите шрифт Symbola из https://fontlibrary.org/en/font/symbola

И мой тестовый скрипт:

import os
import subprocess

import PIL.Image

to_render = '?'
output_file = 'rendered_emoji.bmp'

subprocess.run([
    os.path.join(os.environ['MAGICK_HOME'],  'magick.exe'),
    'convert', '-font', 'Symbola', '-size', '50x50',
    '-gravity', 'center', f'label:{to_render}', output_file])
image = PIL.Image.open(output_file)
image.show()
...