Javascript 为什么将画布保存为jpeg或pdf结果黑色图像?
我有以下代码:Javascript 为什么将画布保存为jpeg或pdf结果黑色图像?,javascript,pdf,canvas,html5-canvas,Javascript,Pdf,Canvas,Html5 Canvas,我有以下代码: var imgData; var canvas = document.getElementById('myCanvas'); var context = canvas.getContext('2d'); var imageObj = new Image(); imageObj.onload = function() { context.drawImage(imageObj, 0, 0); }; imgData = canvas.toDataURL("image/jpeg
var imgData;
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
};
imgData = canvas.toDataURL("image/jpeg", 1.0);
imageObj.src = 'http://images.visitcanberra.com.au/images/canberra_hero_image.jpg';
当用户单击JPG或PDF文件时,下载。下载JPG有以下代码:
function saveAsJPG(){
var pom = document.createElement('a');
pom.setAttribute('href', imgData);
pom.setAttribute('download', 'img.jpg');
if (document.createEvent) {
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
} else {
pom.click();
}
}
以及以下PDF格式的代码:
function saveAsPDF(){
var pdf = new jsPDF();
pdf.addImage(imgData, 'JPEG', 0, 0);
pdf.save("download.pdf");
}
代码工作“正确”预期的问题,它不下载图像,但黑屏。有一个正在工作的JSFIDLE示例:
您能帮助我理解它不能正常工作的可能原因吗?在调用
canvas.toDataURL(“image/jpeg”,1.0)之前,您必须等待图像加载代码>。请尝试以下操作:
var imgData;
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
imgData = canvas.toDataURL("image/jpeg", 1.0);
};
imageObj.src = 'http://images.visitcanberra.com.au/images/canberra_hero_image.jpg';
由于安全错误(图像属于不同的域),它无法在小提琴中工作。请在您的网页中试用。在调用canvas.toDataURL(“image/jpeg”,1.0)之前,您必须等待图像加载代码>。请尝试以下操作:
var imgData;
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
imgData = canvas.toDataURL("image/jpeg", 1.0);
};
imageObj.src = 'http://images.visitcanberra.com.au/images/canberra_hero_image.jpg';
由于安全错误(图像属于不同的域),它无法在小提琴中工作。请在您的网页中试用。在调用canvas.toDataURL(“image/jpeg”,1.0)之前,您必须等待图像加载代码>。请尝试以下操作:
var imgData;
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
imgData = canvas.toDataURL("image/jpeg", 1.0);
};
imageObj.src = 'http://images.visitcanberra.com.au/images/canberra_hero_image.jpg';
由于安全错误(图像属于不同的域),它无法在小提琴中工作。请在您的网页中试用。在调用canvas.toDataURL(“image/jpeg”,1.0)之前,您必须等待图像加载代码>。请尝试以下操作:
var imgData;
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
imgData = canvas.toDataURL("image/jpeg", 1.0);
};
imageObj.src = 'http://images.visitcanberra.com.au/images/canberra_hero_image.jpg';
由于安全错误(图像属于不同的域),它无法在小提琴中工作。请在您的网页中试用。您正在从与网页域不同的域加载气球城市图像。出于安全原因,此“跨域”图像绘制将导致浏览器“污染”画布。受污染的画布不允许使用.toDataURL
导出其内容
画布上的“跨域”绘图是您获得全黑文件的原因…#myCanvas没有实际创建您的dataURL,因为浏览器不允许它。
解决方法是将图像托管在与网页相同的域上。然后,浏览器将允许使用canvas.toDataURL
,您的图像将按应有的方式显示
示例代码和演示:
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
var imgData;
var img=新图像();
img.crossOrigin='anonymous';
img.onload=启动;
img.src=”https://dl.dropboxusercontent.com/u/139992952/multple/canberra_hero_image.jpg";
函数start(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
imgData=canvas.toDataURL('image/jpeg',1.0);
$('printJPG')。在('click',saveAsJPG');
}
函数saveAsJPG(){
var pom=document.createElement('a');
setAttribute('href',imgData);
setAttribute('download','img.jpg');
if(document.createEvent){
var event=document.createEvent('MouseEvents');
initEvent('click',true,true);
pom.调度事件(事件);
}否则{
pom.click();
}
}
body{背景色:象牙;}
#画布{边框:1px纯红;}
您正在从与网页域不同的域加载气球城市图像。出于安全原因,此“跨域”图像绘制将导致浏览器“污染”画布。受污染的画布不允许使用.toDataURL
导出其内容
画布上的“跨域”绘图是您获得全黑文件的原因…#myCanvas没有实际创建您的dataURL,因为浏览器不允许它。
解决方法是将图像托管在与网页相同的域上。然后,浏览器将允许使用canvas.toDataURL,您的图像将按应有的方式显示
示例代码和演示:
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
var imgData;
var img=新图像();
img.crossOrigin='anonymous';
img.onload=启动;
img.src=”https://dl.dropboxusercontent.com/u/139992952/multple/canberra_hero_image.jpg";
函数start(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
imgData=canvas.toDataURL('image/jpeg',1.0);
$('printJPG')。在('click',saveAsJPG');
}
函数saveAsJPG(){
var pom=document.createElement('a');
setAttribute('href',imgData);
setAttribute('download','img.jpg');
if(document.createEvent){
var event=document.createEvent('MouseEvents');
initEvent('click',true,true);
pom.调度事件(事件);
}否则{
pom.click();
}
}
body{背景色:象牙;}
#画布{边框:1px纯红;}
您正在从与网页域不同的域加载气球城市图像。出于安全原因,此“跨域”图像绘制将导致浏览器“污染”画布。受污染的画布不允许使用.toDataURL
导出其内容
画布上的“跨域”绘图是您获得全黑文件的原因…#myCanvas没有实际创建您的dataURL,因为浏览器不允许它。
解决方法是将图像托管在与网页相同的域上。然后,浏览器将允许使用canvas.toDataURL,您的图像将按应有的方式显示
示例代码和演示:
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
var imgData;
var img=新图像();
img.crossOrigin='anonymous';
img.onload=启动;
img.src=”https://dl.dropboxusercontent.com/u/139992952/multple/canberra_hero_image.jpg";
函数start(){
canvas.width=img.width;
canvas.height=img.height;
ctx.drawImage(img,0,0);
imgData=canvas.toDataURL('image/jpeg',1.0);
$('printJPG')。在('click',saveAsJPG');
}
函数saveAsJPG(){
var pom=document.crea