我需要將字體呈現到畫布上,而不使用任何消除鋸齒或ClearType。然後,我需要按照整數因子將這些縮放到另一個畫布上,而不進行任何平滑處理。在Chrome中爲<canvas>禁用DirectWrite和ClearType
從小畫布縮放到大畫布可以正常工作(通過在2D上下文中設置imageSmoorthingEnabled = false),但是我無法解決如何禁用消除鋸齒/ ClearType而不禁用整個瀏覽器和OS。
如果我不在操作系統中禁用ClearType,並且禁用Chrome中的DirectWrite(chrome:// flags#disable-direct-write),我會按照下面的第一張圖片得到結果。對於這兩個禁用,我得到所需的效果 - 請參閱第二個鏈接。在
的DirectWrite /的ClearType的DirectWrite /關閉ClearType的
雖然我有一種變通方法,我真的在尋找一種方式來禁用這些功能僅限於畫布級別,因此我們無需要求用戶對其進行更改其操作系統和瀏覽器設置。
我不需要跨瀏覽器解決方案,Chrome首選。
我的測試開發environtment是Windows 7的64 +的Chrome版本49.0.2623.28的β-M(64位)
**編輯:添加了一個例子說明爲什麼第一個答案沒有解決的問題:
示例位圖字體是21px。請注意,如果我們以該尺寸渲染它,然後放大10倍,仍然可以看到平滑/消除鋸齒。
@font-face {
font-family: "vcr-osd-mono";
src: url("https://dl.dropboxusercontent.com/s/hsdwvz761xqphhb/pixel.ttf");
}
canvas {
font-family: vcr-osd-mono
-webkit-font-smoothing: none;
}
<body onload="
var ctx = canvas.getContext('2d');
ctx.font = '21px vcr-osd-mono';
ctx.textBaseline = 'top';
ctx.fillText(' ', 0, 0);
">
<button onclick="
var ctx = canvas.getContext('2d');
ctx.font = '21px vcr-osd-mono';
ctx.textBaseline = 'top';
ctx.fillText('TESTING', 0, 0);
var ctx2 = canvas2.getContext('2d');
ctx2.imageSmoothingEnabled = false;
ctx2.scale(10,10);
ctx2.drawImage(canvas, 0, 0);
">Click</button><br/>
<canvas id="canvas" width="100" height="30"></canvas><br/>
<canvas id="canvas2" width="1000" height="300"></canvas><br/>
</body>
你已經找到了解決呢? – Diego