Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将画布另存为png,无需在html/javascript Air应用程序中提示_Javascript_Canvas_Air - Fatal编程技术网

将画布另存为png,无需在html/javascript Air应用程序中提示

将画布另存为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来创建应用程序部分的屏幕截图。我确实有工作代码,但它会提示用户保存。我想在没有提示的情况下保存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();
      }
});
以下是我在没有提示的情况下的尝试,但出现错误,类型强制失败:

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代码。