Я предполагаю, что это ошибка, но если кто-либо из вас знает какую-либо работу, пожалуйста, дайте мне знать.Canvas Греческие шрифты Google не отображаются правильно
Прежде всего, шрифты загружаются 101%.
загружает шрифты Google синхронно
проверяет с интервалом, чтобы убедиться, что загружен шрифт.
преобразовать строку в изображение (с ниже функцией), используя холст с успехом (когда я использую английские символы)
После рендеринга пары английских символов я пытаюсь сделать греческое слово но холст падает на шрифт браузера по умолчанию.
У Firefox нет никаких проблем, он отлично работает. Вопрос: с Chrome.
пыльник это функция, которая создает фон ленточная этикетки изображение на верхнем левом углу от заданной строки (PS: эта функция возвращает ImageData которые были слиты с другими ImageData позже):
ImageProcessor.prototype.createLabelImageData = function (str, size, font, color, backgroundColor, shadowColor, shadowOffsetX, shadowOffsetY, shadowBlur, width, height) {
this.canvas.width = width || this.settings.width;
this.canvas.height = height || this.settings.height;
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
this.ctx.font = "Bold " + (size || 64) + "px " + (font || "Arial");
this.ctx.textAlign = "center";
this.ctx.textBaseline = "middle";
var labelHeight = (size || 64) + ((size || 64)/4);
var labelTop = this.canvas.height/2 - labelHeight/2;
var labelWidth = this.canvas.width;
var strLen = this.ctx.measureText(str + " ").width;
var side = Math.sqrt((strLen * strLen)/2);
var distance = Math.sqrt((side * side) - ((strLen/2) * (strLen/2)));
this.ctx.save();
this.ctx.rotate(-Math.PI/4);
this.ctx.translate(-this.canvas.width/2, -this.canvas.height/2 + distance);
this.ctx.fillStyle = (backgroundColor || '#f00');
this.ctx.beginPath();
this.ctx.moveTo(0, labelTop);
this.ctx.lineTo(labelWidth, labelTop);
this.ctx.lineTo(labelWidth, labelTop + labelHeight);
this.ctx.lineTo(0, labelTop + labelHeight);
this.ctx.closePath();
this.ctx.fill();
if (shadowColor) {
this.ctx.shadowColor = shadowColor;
this.ctx.shadowOffsetX = (shadowOffsetX || 0);
this.ctx.shadowOffsetY = (shadowOffsetY || 0);
this.ctx.shadowBlur = (shadowBlur || size || 64);
}
this.ctx.fillStyle = (color || "#fff");
this.ctx.fillText(str, this.canvas.width/2, this.canvas.height/2);
this.ctx.restore();
var imageData = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
this.canvas.width = this.settings.width;
this.canvas.height = this.settings.height;
return imageData;
};