2017-10-15 3 views
0

Je dessine un texte sur une toile. Le problème est ctx.font = la police est complètement ignorée et définit par défaut 10px sans-serif. Voici ma fonction.Police de canevas ignorée lorsqu'elle est explicitement affectée

function drawResTexts(num) { 
        var num = num || ""; 
        var font = (resTxtStyle["font-style"+num] != 
undefined ? resTxtStyle["font-style"+num] : "normal") + " " + resTxtStyle["font-size"+num] + "px " + resTxtStyle["font"+num]; 

        ctx.font = font; // This line has no effect whatsoever 

        ctx.textAlign = resTxtStyle["align"+num] || "left"; 
        var txtArr = resTxt.split("\n"); 

        for (var i = 0; i < txtArr.length; i++) { 
         if (resTxtStyle["stroke"+num] != undefined) { 
          var stroke = resTxtStyle["stroke"+num].split(" "); 
          ctx.strokeStyle = stroke[1]; 
          ctx.lineWidth = Number(stroke[0]) * 2; 
          ctx.strokeText(txtArr[i], resTxtStyle["pos"+num][0], resTxtStyle["pos"+num][1]); 
         } 
         ctx.fillStyle = resTxtStyle["color"+num]; 
         ctx.fillText(txtArr[i], resTxtStyle["pos"+num][0], resTxtStyle["pos"+num][1] + i * (resTxtStyle["line-height"+num] || 0)); 
        } 
       } 

Puis j'appelle cette fonction en utilisant drawText(); variable police

est "regular 45px Georgia"

Voici mon resTxtStyle obj

resTxtStyle = { 
      "align": "center", 
      "font": "Georgia", 
      "font-size": "45", 
      "font-style": "regular", 
      "color": "#FFFF4C", 
      "stroke": "2 #000" 
} 

Quelqu'un peut-il s'il vous plaît aider?

J'ai vu un problème similaire ici, mais ici - http://www.tenpay.tech/questions/2162612/html-5-canvas-font-being-ignored Mais ici toile.getContext a été appelé à nouveau qui réinitialisait la police, mais il n'y a pas un tel cas dans le mien.

L'aide serait appréciée.

Répondre

1

Comme il se trouve, la police devrait être "normal 45px Georgia". C'est bizarre parce que chaque logiciel graphique utilise "regular" pour le style de police. Peut-être que quelqu'un obtiendra de l'aide avec ceci.

+0

Oui la propriété canvas 'font' s'attend à une valeur CSS stencil short, où * standard * 'font-weight' s'appelle' normal', ce qui est aussi un nom assez fréquent pour ce qu'on appelle aussi * regular * ou *plaine*. Notez que vous pouvez également utiliser [l'échelle de poids numérique TrueType] (https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Common_weight_name_mapping), si vous n'aimez pas les noms. Et votre affirmation que * "chaque logiciel graphique utilise" regular "" * est trompeuse: ils utilisent le nom que les graphistes leur ont donné. Par exemple sur mon osx par défaut * Tahoma * est * normal *, et pour * Savoye LET * c'est * plain *. – Kaiido

+0

Ok, Merci de m'avoir corrigé. –