Canvas 如何直式書寫中文

 抱歉,之前的回覆只產生了圖片。是的,Canvas 可以實現直式書寫中文,但 Canvas API 本身並沒有直接提供直式文字繪製的功能。你需要通過一些技巧來實現。

以下是一個 HTML 頁面,包含了使用 JavaScript 在 Canvas 上直式書寫中文的程式碼:

<html>
<head>
<title>Canvas 直式中文</title>
<style>
    #myCanvas {
        border: 1px solid black;
    }
</style>
</head>
<body>

<canvas id="myCanvas" width="100" height="200"></canvas>

<script>
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');
const text = '你好世界';
const fontSize = 30;
ctx.font = `${fontSize}px serif`;
ctx.fillStyle = 'black';
ctx.textAlign = 'center'; // 水平居中

// 直式繪製文字
for (let i = 0; i < text.length; i++) {
const char = text.charAt(i);
const x = canvas.width / 2;
const y = fontSize * (i + 1);
ctx.fillText(char, x, y);
}
</script>
</body>
</html>

程式碼解釋:

  1. 獲取 Canvas 和 Context:

    • const canvas = document.getElementById('myCanvas'); 獲取 Canvas 元素。

    • const ctx = canvas.getContext('2d'); 獲取 2D 繪圖上下文。

  2. 設定文字樣式:

    • const text = '你好世界'; 定義要繪製的文字。

    • const fontSize = 30; 設定字體大小。

    • ctx.font = ${fontSize}px serif; 設定 Canvas 的字體。

    • ctx.fillStyle = 'black'; 設定文字顏色為黑色。

    • ctx.textAlign = 'center'; 設定文字水平對齊方式為居中,這樣每個字會在水平方向上居中於我們指定的 x 座標。

  3. 直式繪製邏輯:

    • 使用 for 迴圈遍歷文字的每個字元。

    • const char = text.charAt(i); 獲取當前字元。

    • const x = canvas.width / 2; 設定每個字元的水平中心位置為 Canvas 的中心。

    • const y = fontSize * (i + 1); 設定每個字元的垂直位置。這裡我們將每個字元的 y 座標設定為字體大小的倍數,使其垂直排列。(i + 1) 是因為我們希望第一個字從 fontSize 開始繪製,而不是 0。

    • ctx.fillText(char, x, y); 使用設定好的樣式繪製當前字元。

注意事項:

  • 這種方法是通過逐個繪製字元並調整其垂直位置來模擬直式書寫。

  • 對於更複雜的排版需求(例如,考慮標點符號的直式排版規則),可能需要更複雜的邏輯處理。

  • 你可以調整 fontSize 和 Canvas 的 widthheight 來適應不同的文字內容和佈局需求。

  • Canvas 本身不支持文字方向(例如,direction: rtl; 對 Canvas 無效),因此實現直式或反向文字需要手動處理字元的位置。

留言

這個網誌中的熱門文章

Offscreen Canvas

外部網頁新增 Google 日曆行程(URL模板)

計算 Canvas 文字最大字體