JavaScript?Canvas實現(xiàn)高清繪制效果
canvas繪制模糊
在我們?nèi)粘@L制canvas的時候都不可避免的遇到一個問題,那就是canvas繪制出來的東西可能會有模糊,發(fā)虛
為什么會模糊呢?那是因為沒有考慮到DPR(Device Pixel Ratio),叫做設備像素比
什么是設備像素比,例如你的電腦是1920 * 1280的,那就是橫向有1920個像素,縱向有1280個像素,那么是否我們在css里設置的像素就是我們看到的像素,其實我們的瀏覽器都有縮放,
例如一個元素設置了500 * 500的像素,而瀏覽器的縮放倍率為1.5倍,說明屏幕放大了1.5倍,縮放倍率可以通過window.devicePixelRatio獲取,縮放倍率的大小取決于你的屏幕有多高清,元素占用 500 * 500個像素的時候是清晰的,但是屏幕放大了1.5倍導致占用了750 * 750個像素就導致不清晰了,所以使用canvas繪制的時候就會產(chǎn)生這樣一個問題
解決canvas繪制模糊
有個這個縮放倍率之后就可以對canvas進行操作,將canvas的放大到寬高乘以縮放倍率,再通過css將寬高修改回原來的大小,這樣canvas繪制出來就是高清的,不過canvas里的內(nèi)容也會被縮放,因此想保持原來的比例,就要將canvas進行同等比例的放大或者縮小
//修改前
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.lineWidth = 10;
ctx.strokeStyle = "orange";
ctx.moveTo(100, 100);
ctx.lineTo(400, 400);
ctx.stroke();
ctx.closePath();
//修改后
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
// 獲取縮放倍率
const getPixelRatio = (context) => {
return window.devicePixelRatio || 1;
};
const ratio = getPixelRatio();
// 保存原來的寬高
const oldWidth = canvas.width;
const oldHeight = canvas.height;
// canvas畫布進行放大
canvas.width = canvas.width * ratio;
canvas.height = canvas.height * ratio;
// 在css里將寬高設置為原來的大小
canvas.style.width = oldWidth + "px";
canvas.style.height = oldHeight + "px";
// 考慮到內(nèi)容的縮放,將ctx縮放
ctx.scale(ratio, ratio);
ctx.beginPath();
ctx.lineWidth = 10;
ctx.strokeStyle = "orange";
ctx.moveTo(100, 100);
ctx.lineTo(400, 400);
ctx.stroke();
ctx.closePath();效果圖:

到此這篇關于JavaScript Canvas實現(xiàn)高清繪制效果的文章就介紹到這了,更多相關Canvas高清繪制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
這篇文章主要介紹了jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow(),需要的朋友可以參考下2015-08-08
jQuery EasyUI ProgressBar進度條組件
這篇文章主要為大家詳細介紹了jQuery EasyUI ProgressBar進度條組件的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
基于JavaScript如何實現(xiàn)ajax調(diào)用后臺定義的方法
JQuery獲取樣式中的background-color顏色值的問題

