如何从 JsBarcode 实现生成图像?

4 javascript canvas jsbarcode

我正在使用JsBarcode在一个人结账时生成一个。我想将其发送到他们的电子邮件,但我不能,因为生成的电子邮件是 SVG 内的路径集合,因此他们不会将其发送到他们的电子邮件(没有呈现任何内容)。所以我想让这段代码生成后成为一个图像。

我的HTML: <svg id="barcode"></svg><canvas id="canvas"></canvas>

我在生成条形码后尝试执行以下操作(有效):

JsBarcode("#barcode", result.source.number, {
                  text: result.source.number.match(/.{1,4}/g).join ("  "),
                  width: 2,
                  height: 50,
                  fontSize: 15,
                });
Run Code Online (Sandbox Code Playgroud)

致电:

var canvas = $("#barcode");
var img = canvas.toDataURL("image/png");
$("#canvas").append('<img src="' + img + '"/>');
Run Code Online (Sandbox Code Playgroud)

然而,当这样做时,我得到:

canvas.toDataURL is not a function。我用谷歌搜索了一下,据我所知,如果我给出toDataURL()一个数组,但页面中实际上没有其他画布,那就更有意义了。我在这里缺少什么?

此时,我意识到这会在代码中显示条形码两次,但我不在乎,之后我会修复它。我对生成图像更感兴趣,但我似乎无法做到这一点。

raf*_*uto 6

您正在使用 jquery 并将元素包装在数组中。element[0]您可以使用或 使用https://api.jquery.com/get/选择原始 DOM 节点element.get(0)

您不需要canvas元素,您可以将SVG序列化为base64 URL并将其用作图像源。

var number = '12345678';

JsBarcode("#barcode", number, {
  text: number.match(/.{1,4}/g).join("  "),
  width: 2,
  height: 50,
  fontSize: 15,
});

var svg = $("#barcode")[0];

var xml = new XMLSerializer().serializeToString(svg);

var base64 = 'data:image/svg+xml;base64,' + btoa(xml);

var img = $("#image")[0];

img.src = base64;
Run Code Online (Sandbox Code Playgroud)
svg {
  border: 1px solid green;
}

img {
  border: 1px solid red;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jsbarcode/3.6.0/JsBarcode.all.min.js"></script>

<svg id="barcode"></svg>

<img id="image"></img>
Run Code Online (Sandbox Code Playgroud)