Хотите сохранить диаграмму. js диаграмм в изображение, используя задание django cron - PullRequest
0 голосов
/ 05 августа 2020

Я хочу сохранить диаграмму. js холст HTML 5 диаграмма тегов в изображение с использованием cron / batch с использованием Django. Дайте мне знать, есть ли там, так как я много искал, но не нашел ни одной библиотеки или пакета такого типа.

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

1 Ответ

1 голос
/ 05 августа 2020

Существует несколько способов создания изображений из диаграммы. js диаграмма из Python.

  1. Используйте toBase64Image из диаграммы. js API для создания изображения вашего графика и отправки его на ваш сервер по электронной почте. Это решение требует, чтобы клиент загружал каждую диаграмму перед ее отправкой по электронной почте (невозможно только в Django).

  2. Используйте pyppeteer , a Python драйвер для Puppeteer , который является браузером без подключения к компьютеру. В этом случае вы можете загрузить свою страницу, содержащую диаграмму, а затем сделать снимок экрана:

browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com/path/to/chart')
await page.screenshot({'path': 'chart.png'})
await browser.close()

Это должно работать нормально, но это несколько тяжеловесное решение, требующее локального рендеринга. на веб-сервере, если вы не настроили некоторую рабочую инфраструктуру.

Используйте веб-сервис, например QuickChart , чтобы обработать для вас рендеринг (обратите внимание, что это я создал, но он с открытым исходным кодом и может размещаться самостоятельно). Это работает, когда вы берете конфигурацию Chart. js и отправляете ее в веб-службу:
import json
from urllib.parse import quote

import requests

# Set up the chart.js config. This can either be a string or python dict.
chart_config = {
  'type': 'bar',
  'data': {
    'labels': ['Week 1', 'Week 2', 'Week 3', 'Week 4'],
    'datasets': [{
      'label': 'Retweets',
      'data': [12, 5, 40, 5]
    }, {
      'label': 'Likes',
      'data': [80, 42, 215, 30]
    }]
  }
}))

# Convert the python dict to a string and URL-encode it
encoded_config = quote(json.dumps(chart_config))

# Download chart
chart_url = f'https://quickchart.io/chart?c={encoded_config}'

f = requests.get(chart_url, stream=True)
if r.status_code == 200:
    with open('/tmp/chart.png', 'wb') as f:
        for chunk in r:
            f.write(chunk)

Существует также Python клиент , который вы можете использовать.

...