简体   繁体   English

使用 html2canvas 捕获的 HTML div 未满

[英]Captured HTML div with html2canvas is not full

I'm working on a meme editor website using the html2canvas library from https://html2canvas.hertzen.com/我正在使用https://html2canvas.hertzen.com/ 中的 html2canvas 库在模因编辑器网站上工作

here is my html code for the div that I need to capture:这是我需要捕获的div html 代码:

<div class="container">
    <div id="theUserMeme">

        <div class="row">

            <p id="memeWords">
                When I see something lol 

            </p>

        </div>

        <div class="row">
            <img id = "memeImage" src="images/init meme.jpg">
        </div>

    </div>
</div>

Also, this my JavaScript code that I run to capture the div :此外,这是我运行以捕获div JavaScript 代码:

function generateMeme(){

    window.scrollTo(0,0);

    html2canvas(document.querySelector("#theUserMeme")).then(canvas => {
        
        var image = canvas.toDataURL('image/jpeg', 1);
        console.log(image);
        
        alert(image);

        document.getElementById("finalImageCopy").src = image;
    });


}

After hosting the code on Github, I tried the page on my iPhone and my laptop.在 Github 上托管代码后,我在 iPhone 和笔记本电脑上尝试了该页面。 It was working well on both devices, but after that it is working on the phone only.它在两种设备上都运行良好,但之后只能在手机上运行。 When I use it on the desktop, the captured image isn't full and sometimes it is only white image.当我在桌面上使用它时,捕获的图像不完整,有时它只是白色图像。

What is the problem could be?可能是什么问题?

It seems by default width of a <div> is equal to width of the visible area (please correctly if I'm wrong) and if an image is larger it doesn't "stretch" the div, it simply overflows out of it似乎<div>的默认宽度等于可见区域的宽度(如果我错了,请正确),如果图像较大,它不会“拉伸”div,它只是溢出它

So one way to fix this is to add width: fit-content;因此,解决此问题的一种方法是添加width: fit-content; to your element: https://jsfiddle.net/vanowm/h5yroe2q/到您的元素: https : //jsfiddle.net/vanowm/h5yroe2q/

 function generateMeme(id, options){ window.scrollTo(0,0); html2canvas(document.querySelector("#theUserMeme"), options).then(canvas => { console.log(canvas); var image = canvas.toDataURL('image/jpeg', 1); console.log(image); document.getElementById(id || "finalImageCopy").src = image; }); } //generate first image generateMeme(); //generate second image with adding options to html2canvas generateMeme("finalImageCopy2", { width: document.querySelector("#theUserMeme").scrollWidth }); //set width document.querySelector("#theUserMeme").style.width = "fit-content"; //generate third image generateMeme("finalImageCopy3");
 body { width: 50px; } pre { width: fit-content; } pre > img { border: 2px solid red; }
 <script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script> <div class="container"> <div id="theUserMeme"> <div class="row"> <p id="memeWords"> When I see something lol </p> </div> <div class="row"> <img id = "memeImage" src="data:image/png;base64,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"> </div> </div> </div> <pre> Captured image: <img id="finalImageCopy"> Captured image manually set canvas width: <img id="finalImageCopy2"> Captured image with <b>width: fit-content</b>: <img id="finalImageCopy3"> </pre>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM