gpt4 book ai didi

javascript - Canvas toDataURL() 方法正在保存低分辨率图像

转载 作者:搜寻专家 更新时间:2023-11-01 04:36:52 24 4
gpt4 key购买 nike

我已经使用 HTML5 canvas 制作了一个多边形背景生成器:

http://codepen.io/rfalor/pen/LhinJ

这是相关代码:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var dataURL = canvas.toDataURL();
ctx.clearRect(0, 0, canvas.width, canvas.height);
document.getElementById('canvasImg').src = dataURL;

当用户单击 Canvas ,然后单击“准备图像”时,右键单击时保存的图像是低分辨率的 (300px x 150px),而不是 Canvas 分辨率。如何允许用户保存更高分辨率的图像?

最佳答案

问题是您使用 css 而不是 Canvas 元素的 widthheight 属性来调整 Canvas 的大小。当您这样做时,您只是在拉伸(stretch) Canvas ,而不是增加元素的坐标空间。

我在你的代码中添加了以下内容

canvas.width = 700;
canvas.height = 396;

然后我不得不稍微更改您的随机化函数以接受一个数字,因为它不会总是 500;

function randomize(num) {
var a = Math.floor(Math.random() * num);
return a;
}

现在您可以像这样调用您的 lineTo

ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));

但是我意识到您可能希望它比宽度和高度更多,这样您就看不到形状的边缘,但我认为您可以解决这个问题。

Live Demo

下面完全修改了代码。

var canvas = document.getElementById('canvas');

function randomize(num) {
var a = Math.floor(Math.random() * num);
return a;
}

function sides() {
var a = Math.floor(Math.random() * 10);
return a;
}

function getRndColor() {
var r = 255 * Math.random() | 0,
g = 255 * Math.random() | 0,
b = 255 * Math.random() | 0,
alpha = 0.1; //Math.random().toFixed(1);
var final = 'rgba(' + r + ',' + g + ',' + b + ',' + alpha + ')';
return final;
}

$('*').click(function () {
clearInterval(timer);
$('button').show();
});

$('button').click(function () {
$(this).css('left', '-400px');
$('h3').text("Right click and save a beautiful background!");
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var dataURL = canvas.toDataURL();
ctx.clearRect(0, 0, canvas.width, canvas.height);
document.getElementById('canvasImg').src = dataURL;
$('#canvasImg').css('border', '5px solid black');
$('#canvas').hide();
$('#canvasImg').show();
});

if (canvas.getContext) {
var ctx = canvas.getContext('2d');
var left = true;

canvas.width = 700;
canvas.height = 396;

var timer = setInterval(function () {
for (var i = 1; i <= 1000; i++) {
ctx.beginPath();
if (left) {
ctx.moveTo(0, randomize(canvas.height));
left = false;
} else {
ctx.moveTo(randomize(canvas.width), 0);
left = true;
}
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
ctx.fillStyle = getRndColor();
ctx.fill();
}
}, 1000);
}

关于javascript - Canvas toDataURL() 方法正在保存低分辨率图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24883480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com