admin管理员组文章数量:1023857
I have made a polygonal background generator using HTML5 canvas over at:
This is the relevant code:
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;
When an user clicks the canvas, and subsequently "Prepare Image", the image that is saved on right click is of low resolution(300px x 150px), instead of the canvas resolution. How do I allow the user to save a higher resolution image?
I have made a polygonal background generator using HTML5 canvas over at:
http://codepen.io/rfalor/pen/LhinJ
This is the relevant code:
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;
When an user clicks the canvas, and subsequently "Prepare Image", the image that is saved on right click is of low resolution(300px x 150px), instead of the canvas resolution. How do I allow the user to save a higher resolution image?
Share Improve this question edited Jul 22, 2014 at 15:09 Loktar 35.3k7 gold badges96 silver badges106 bronze badges asked Jul 22, 2014 at 9:21 Rohit FalorRohit Falor 1,2842 gold badges11 silver badges17 bronze badges1 Answer
Reset to default 3The problem is you're sizing the canvas using css rather than the width
and height
properties of the canvas element. When you do that you're only stretching the canvas not increasing the coordinate space of the element.
I added the following to your code
canvas.width = 700;
canvas.height = 396;
Then I had to change your randomize function a bit to accept a number since it wont always be 500;
function randomize(num) {
var a = Math.floor(Math.random() * num);
return a;
}
And you can now call your lineTo
's like this
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
However I realize you probably want it to be more than the width and height so you don't see the edges of the shapes but I figure you can fix that up.
Live Demo
Fully modified code below.
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);
}
I have made a polygonal background generator using HTML5 canvas over at:
This is the relevant code:
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;
When an user clicks the canvas, and subsequently "Prepare Image", the image that is saved on right click is of low resolution(300px x 150px), instead of the canvas resolution. How do I allow the user to save a higher resolution image?
I have made a polygonal background generator using HTML5 canvas over at:
http://codepen.io/rfalor/pen/LhinJ
This is the relevant code:
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;
When an user clicks the canvas, and subsequently "Prepare Image", the image that is saved on right click is of low resolution(300px x 150px), instead of the canvas resolution. How do I allow the user to save a higher resolution image?
Share Improve this question edited Jul 22, 2014 at 15:09 Loktar 35.3k7 gold badges96 silver badges106 bronze badges asked Jul 22, 2014 at 9:21 Rohit FalorRohit Falor 1,2842 gold badges11 silver badges17 bronze badges1 Answer
Reset to default 3The problem is you're sizing the canvas using css rather than the width
and height
properties of the canvas element. When you do that you're only stretching the canvas not increasing the coordinate space of the element.
I added the following to your code
canvas.width = 700;
canvas.height = 396;
Then I had to change your randomize function a bit to accept a number since it wont always be 500;
function randomize(num) {
var a = Math.floor(Math.random() * num);
return a;
}
And you can now call your lineTo
's like this
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
ctx.lineTo(randomize(canvas.width), randomize(canvas.height));
However I realize you probably want it to be more than the width and height so you don't see the edges of the shapes but I figure you can fix that up.
Live Demo
Fully modified code below.
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);
}
本文标签: javascriptCanvas toDataURL() method is saving low resolution imageStack Overflow
版权声明:本文标题:javascript - Canvas toDataURL() method is saving low resolution image - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745567307a2156528.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论