html 画布分辨率和导出分辨率

xdnvmnnf  于 2023-06-04  发布在  其他
关注(0)|答案(3)|浏览(380)

我的画布是width=“600px”和height=“500px”。
然后在画布上显示图像(1200px和1000px)

ctx.drawImage(img,600,500);

最后用这个脚本导出。

var a = document.createElement('a');
a.href = mycanvas.current.toDataURL('image/jpeg', 0.85);

在这种情况下,jpg的最终分辨率是600px x 500px。
但是我想保持最终分辨率1200 x 1000 jpg。
什么是实现此目的的最佳实践。

yqhsw0fo

yqhsw0fo1#

您可以按照以下步骤将最终分辨率保持为1200 x 1000 px。

var finalCanvas = document.createElement('canvas');
finalCanvas.width = 1200;
finalCanvas.height = 1000;
var finalCtx = finalCanvas.getContext('2d');

finalCtx.drawImage(img, 0, 0, finalCanvas.width, finalCanvas.height);
var a = document.createElement('a');
a.href = finalCanvas.toDataURL('image/jpeg', 0.85);
g2ieeal7

g2ieeal72#

我使用clientWidthwidth
使用clientWidth = 600width = 1200
这是可以做到的

vshtjzan

vshtjzan3#

HTMLCanvasElement

分辨率V显示尺寸

解析

使用canvas元素属性HTMLCanvasElement.widthHTMLCanvasElement.height设置分辨率(像素数

*注意设置HTMLCanvasElement.widthHTMLCanvasElement.height会将CanvasRenderingContext2D属性重置(清除/归零所有像素)为默认值。

显示大小

要设置画布元素的显示大小(在页面上显示的大小),请使用元素样式(CSS)属性HTMLCanvasElement.style.widthHTMLCanvasElement.style.height

*注意显示像素可能与显示设备的物理像素大小(显示器上的像素大小)不匹配。要知道物理像素大小,请使用devicePixelRatio。物理像素的尺寸目前对于浏览器/ JS是未知的。

示例

将显示大小设置为分辨率的一半。

*注意必须使用devicePixelRatio将画布像素调整为页面像素大小。

function resizeCanvas(canvasEl, width, height, displayScale = 0.5) {
    displayScale *= devicePixelRatio;
    canvasEl.width = width;
    canvasEl.height = height;
    canvasEl.style.width = (width * displayScale).toFixed(0) + "px";
    canvasEl.style.height = (height * displayScale).toFixed(0) + "px";
}

使用上述函数

// Set resolution 1200 by 1000 and display size 600 by 500. 
// Create dataURL of canvas image 1200 by 1000
const canvas = mycanvas.current;
resizeCanvas(canvas, 1200, 1000, 0.5); 
canvas.getContext("2d").drawImage(img, canvas.width, canvas.height);
const dataURL = canvas.toDataURL("image/jpeg", 0.85);

相关问题