将画布另存为png,无需在html/javascript Air应用程序中提示
我正在使用html2canvas来创建应用程序部分的屏幕截图。我确实有工作代码,但它会提示用户保存。我想在没有提示的情况下保存png 这是我的工作代码,但有用户提示:将画布另存为png,无需在html/javascript Air应用程序中提示,javascript,canvas,air,Javascript,Canvas,Air,我正在使用html2canvas来创建应用程序部分的屏幕截图。我确实有工作代码,但它会提示用户保存。我想在没有提示的情况下保存png 这是我的工作代码,但有用户提示: html2canvas( $('#renderCover'), { onrendered: function(canvas) { var base64ToByteArray = function(encStr){ var base64s = "ABCDEFGHIJKLMNOP
html2canvas( $('#renderCover'), {
onrendered: function(canvas) {
var base64ToByteArray = function(encStr){
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var decOut = new air.ByteArray();
var bits;
for(var i = 0, j = 0; i<encStr.length; i += 4, j += 3){
bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
decOut[j+0] = ((bits & 0xff0000) >> 16);
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 2) != 61){
decOut[j+1] = ((bits & 0xff00) >> 8);
}
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 1) != 61){
decOut[j+2] = (bits & 0xff);
}
}
return decOut;
};
var dataURL = canvas.toDataURL("image/png");
dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
dataURL = base64ToByteArray(dataURL);
var file = air.File.documentsDirectory.resolvePath("Air Test/testPNG.png");
file.save(dataURL);
}
});
html2canvas( $('#renderCover'), {
onrendered: function(canvas) {
var base64ToByteArray = function(encStr){
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var decOut = new air.ByteArray();
var bits;
for(var i = 0, j = 0; i<encStr.length; i += 4, j += 3){
bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
decOut[j+0] = ((bits & 0xff0000) >> 16);
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 2) != 61){
decOut[j+1] = ((bits & 0xff00) >> 8);
}
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 1) != 61){
decOut[j+2] = (bits & 0xff);
}
}
return decOut;
};
var dataURL = canvas.toDataURL("image/png");
dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
dataURL = base64ToByteArray(dataURL);
var storage = 'documentsDirectory';
var localFile = air.File[storage].resolvePath( "Air Test/testPNG.png" );
var stream = new air.FileStream();
stream.open(localFile, air.FileMode.WRITE);
stream.writeBytes(dataURL,0);
stream.close();
}
});
以下是我在没有提示的情况下的尝试,但出现错误,类型强制失败:
html2canvas( $('#renderCover'), {
onrendered: function(canvas) {
var base64ToByteArray = function(encStr){
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var decOut = new air.ByteArray();
var bits;
for(var i = 0, j = 0; i<encStr.length; i += 4, j += 3){
bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
decOut[j+0] = ((bits & 0xff0000) >> 16);
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 2) != 61){
decOut[j+1] = ((bits & 0xff00) >> 8);
}
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 1) != 61){
decOut[j+2] = (bits & 0xff);
}
}
return decOut;
};
var dataURL = canvas.toDataURL("image/png");
dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
dataURL = base64ToByteArray(dataURL);
var storage = 'documentsDirectory';
var localFile = air.File[storage].resolvePath( "Air Test/testPNG.png" );
var stream = new air.URLStream();
stream.addEventListener(air.Event.COMPLETE, function(e){
var fileData = new air.ByteArray();
stream.readBytes(fileData,0,stream.bytesAvailable);
var fileStream = new air.FileStream();
fileStream.openAsync(localFile, air.FileMode.WRITE);
fileStream.writeBytes(fileData,0);
fileStream.close();
});
stream.load(dataURL);
}
});
有没有办法在没有用户提示的情况下将画布保存为png local?谢谢,但我自己修复了它。以下是在本地将画布保存为.png而无需用户提示的工作代码:
html2canvas( $('#renderCover'), {
onrendered: function(canvas) {
var base64ToByteArray = function(encStr){
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var decOut = new air.ByteArray();
var bits;
for(var i = 0, j = 0; i<encStr.length; i += 4, j += 3){
bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
decOut[j+0] = ((bits & 0xff0000) >> 16);
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 2) != 61){
decOut[j+1] = ((bits & 0xff00) >> 8);
}
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 1) != 61){
decOut[j+2] = (bits & 0xff);
}
}
return decOut;
};
var dataURL = canvas.toDataURL("image/png");
dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
dataURL = base64ToByteArray(dataURL);
var file = air.File.documentsDirectory.resolvePath("Air Test/testPNG.png");
file.save(dataURL);
}
});
html2canvas( $('#renderCover'), {
onrendered: function(canvas) {
var base64ToByteArray = function(encStr){
var base64s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var decOut = new air.ByteArray();
var bits;
for(var i = 0, j = 0; i<encStr.length; i += 4, j += 3){
bits = (base64s.indexOf(encStr.charAt(i)) & 0xff) <<18 | (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 | base64s.indexOf(encStr.charAt(i +3)) & 0xff;
decOut[j+0] = ((bits & 0xff0000) >> 16);
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 2) != 61){
decOut[j+1] = ((bits & 0xff00) >> 8);
}
if(i+4 != encStr.length || encStr.charCodeAt(encStr.length - 1) != 61){
decOut[j+2] = (bits & 0xff);
}
}
return decOut;
};
var dataURL = canvas.toDataURL("image/png");
dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
dataURL = base64ToByteArray(dataURL);
var storage = 'documentsDirectory';
var localFile = air.File[storage].resolvePath( "Air Test/testPNG.png" );
var stream = new air.FileStream();
stream.open(localFile, air.FileMode.WRITE);
stream.writeBytes(dataURL,0);
stream.close();
}
});
。单击“谢谢”,但这需要用户单击另一个按钮,我认为这仍然会提示输入保存位置。我希望文件保存时没有用户交互。不,js可以调用点击链接,无需用户干预即可触发下载。。。是否询问保存位置取决于浏览器设置,而不是js代码。