Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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
Javascript jsPDF与图像加载_Javascript_Jspdf - Fatal编程技术网

Javascript jsPDF与图像加载

Javascript jsPDF与图像加载,javascript,jspdf,Javascript,Jspdf,我正在尝试使用jsPDF库。我想加载并插入图像,然后导出PDF文件 我的问题是关于图像加载。我正在这样做:var-imageData=getBase64Image('thinking-monkey.jpg')并且我应该在base64中获取imageData中的dataURL MygetBase64Image()函数执行以下操作: function getBase64Image(url) { var img = new Image(); var dataURL; img.

我正在尝试使用jsPDF库。我想加载并插入图像,然后导出PDF文件

我的问题是关于图像加载。我正在这样做:
var-imageData=getBase64Image('thinking-monkey.jpg')
并且我应该在base64中获取
imageData
中的dataURL

My
getBase64Image()
函数执行以下操作:

function getBase64Image(url) {
    var img = new Image();
    var dataURL;

    img.src = url;

    img.onload = function() {
        var canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;

        var context = canvas.getContext('2d');
        context.drawImage(img, 0, 0);

        dataURL = canvas.toDataURL('image/jpeg');

    }

    return dataURL;
}
但它返回“undefined”,因为图像大小约为65KB,不会立即加载。所以当at
返回dataURL时变量仍未定义

我试图在返回数据URL之前添加一个
setTimeout()
但它似乎不起作用

如何等待图像完全加载后返回dataURL


谢谢。

您可以使用回拨。将映像完全加载后要执行的代码传递到getBase64Image函数,并在.onLoad函数中执行

应该是这样的。(generatePdf是一个函数)

将“return”语句移动到img.onload函数中,我想这应该可以做到

function getBase64Image(url) {
    var img = new Image();
    var dataURL;

    img.src = url;

    img.onload = function() {
        var canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;

        var context = canvas.getContext('2d');
        context.drawImage(img, 0, 0);

        dataURL = canvas.toDataURL('image/jpeg');

        return dataURL;   /* MOVED */
    }
}
function getBase64Image(url) {
    var img = new Image();
    var dataURL;

    img.src = url;

    img.onload = function() {
        var canvas = document.createElement('canvas');
        canvas.width = img.width;
        canvas.height = img.height;

        var context = canvas.getContext('2d');
        context.drawImage(img, 0, 0);

        dataURL = canvas.toDataURL('image/jpeg');

        return dataURL;   /* MOVED */
    }
}