【问题标题】:Convert transparent part of JPEG to White color in Html2Canvas在 Html2Canvas 中将 JPEG 的透明部分转换为白色
【发布时间】:2016-06-22 11:33:11
【问题描述】:

我正在使用 Html2Canvas 将文档导出为 PDF,但它会将 JPEG 的透明部分转换为黑色(我知道应该这样)。但我希望它将透明背景转换为白色。在在线解决方案中,建议更改脚本(Html2Canvas 或 JSPDF),但我不想这样做,因为这并不总是可能的。实现这一目标的最佳方法是什么?

html2canvas(form, {
imageTimeout: 2000,
removeContainer: true,
background:'#FFF',
onrendered: function (canvas) {
    var img = canvas.toDataURL("image/jpeg");
    var doc = new jsPDF({
        unit: 'pt',
        format: 'a4',
    });

    // pageHeight= doc.internal.pageSize.height;
    var image = new Image();
    image = Canvas2Image.convertToJPEG(canvas);
    doc.addImage(img, 'JPEG', 12, 15);
    var corte = (vm.a4[1] * 1.33333) - 30;
    var croppingYPosition = corte;
    var count = (image.height) / corte;
    for (var i = 1; i < count; i++) {
        doc.addPage();
        var sourceX = 0;
        var sourceY = croppingYPosition;
        var sourceWidth = image.width;
        var sourceHeight = corte;
        var destWidth = sourceWidth;
        var destHeight = sourceHeight;
        var destX = 0;
        var destY = 0;
        var canvas1 = canvas;
        canvas1.setAttribute('height', corte * i);
        canvas1.setAttribute('width', destWidth);
        var ctx = canvas1.getContext("2d");
        ctx.drawImage(image, sourceX,
                             sourceY,
                             sourceWidth,
                             sourceHeight,
                             destX,
                             destY,
                             destWidth,
                             destHeight);
        var image2 = new Image();
        image2 = Canvas2Image.convertToJPEG(canvas1);
        var image2Data = image2.src;
        doc.addImage(image2Data, 'JPEG', 12, 15);
        croppingYPosition += destHeight;
    }
    doc.save('firstPDF.pdf');
    $('.pdfTemplates').css('width', '100%');
}

});

【问题讨论】:

    标签: javascript jquery jspdf html2canvas


    【解决方案1】:

    从未真正使用过 Canvas2Image,但这里有一个你可以尝试的技巧。

    1. 第 1 步:代替

    convertToJPEG(画布)

    做一个

    Canvas2Image.convertToPNG(画布)

    PNG 应该理想地保留透明度。

    1. 第 2 步:现在您可以将图像绘制到白色画布上,从而得到带有白色背景的 JPEG

      ctx.fillStyle = "#ffffff";
      ctx.fillRect(0,0,canvas1.width,canvas1.height);
      ctx.drawImage(image, sourceX,
                           sourceY,
                           sourceWidth,
                           sourceHeight,
                           destX,
                           destY,
                           destWidth,
                           destHeight);
      

    【讨论】:

    • 感谢 Anubhab 的回复。但我不是单独拾取图像并将它们放入 PDF 中。我有这个已经渲染的页面,它可能跨越 PDF 上的 4 页,并且图表介于周围的任何地方。如果我使用 convertToPNG(canvas),PDF 的文件大小会急剧增加约 30 MB,我肯定不希望这种行为。因此,我只使用 JPEG(减小文件大小)并寻找解决方法。
    • 毫无疑问 convertToPNG 会给我白色背景,但它会增加我的文件大小。我正在寻找可以帮助我将此画布转换为 JPEG 甚至具有白色背景(无论它是透明的)的解决方法。
    • 哦,你说得对!我的错。嘿,你能上传一个当前输出的样本吗?我有另一个技巧,但需要看看你当前的输出是否可行。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多