2016-02-11 5 views
1

Я рисую графики таймсеров с Chart.js, который использует <canvas> для рисования. Наши пользователи хотели бы иметь возможность загружать изображения этих графиков в свои отчеты. Фон сайта темный, поэтому сами графики используют светло-серые цвета. Это означает, что когда пользователи щелкают правой кнопкой мыши (в Chrome) и выбирают «сохранить изображение как ...», они получают прозрачное изображение с серой/белой строкой (очевидно, не очень заметно).настройка цвета фона холста

Я пытался переопределить canvas.toDataURL, чтобы нарисовать прямоугольник сначала as in this post, но переопределение не работает (я предполагаю, что он не доступен для записи). Есть ли другой способ сделать это?

+0

Посмотрите на это: http://stackoverflow.com/questions/923885/capture-html-canvas-as-gif-jpg-png-pdf –

ответ

1

Это должно сделать трюк:

function getCanvasImage(_ctx, _bgColor){ 
    var tmpCtx = document.createElement("canvas").getContext("2d"); 
     tmpCtx.canvas.width = _ctx.canvas.width; 
     tmpCtx.canvas.height = _ctx.canvas.height; 
     tmpCtx.fillStyle = _bgColor; 
     tmpCtx.fillRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); 
     tmpCtx.drawImage(_ctx.canvas, 0, 0); 

    return tmpCtx.canvas; 
    } 

// ... 
// just call the function passing your canvas context and the background color 
var graphImage = getCanvasImage(ctx, "#222"); 
+0

Но это не совсем решает мою проблему, которая заключается в том, что мои пользователи щелкают правой кнопкой мыши и выбирают «сохранить изображение как ...», что является встроенной функциональностью Chrome. Я предполагаю, что это вызывает 'toDataURL()' (но я мог ошибаться). Я хочу, чтобы они загрузили изображение с цветом фона в нем (вместо прозрачности), но не смогли установить цвет фона - вот почему я попытался переопределить 'toDataURL()'. – GTF

+0

фон графика должен быть прозрачным? Я имею в виду, нельзя ли просто рисовать холст с фона с самого начала? – Saba

+0

Я не рисую непосредственно на холсте (chart.js is), но, полагаю, я мог бы нарисовать фон до того, как график будет инициализирован? Я не хочу рисовать диаграмму, а Chart.js изменяет размер элемента холста. – GTF

Смежные вопросы