使用 html2canvas 在 keyup 和 keypress 上转换为图像

Using html2canvas to convert to image on keyup & keypress

我正在构建一个应用程序,用户可以在其中写一些东西input,然后它会被转换成可以下载的图像。

我使用 html2canvas.js 将文本转换为可下载的图像 (这部分工作正常)

目前它将 <div id="talltweets"></div> 中的文本转换为图像, 但是 我想要的是能够在 text/image 时更改 text/image在 input.

中写入文本

我试图制作一个名为 edValueKeyPressfunction,它将 input 中的内容添加到 <div id="talltweets"></div> 现在 如何把 #talltweets 里面的文字添加到 <img id="textScreenshot"/> in realtime/when writing?

这是我的代码:

   html2canvas(document.getElementById("talltweets"), {
     onrendered: function(canvas) {
       var screenshot = canvas.toDataURL("image/png");
       document.getElementById("textScreenshot").setAttribute("src", screenshot);
     }
   });
 
 function edValueKeyPress() {
   var edValue = document.getElementById("body");
   var s = edValue.value;

   var lblValue = document.getElementById("talltweets");
   lblValue.innerText = s;

 }
<script src="http://files.codepedia.info/uploads/iScripts/html2canvas.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>



<input type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()" id="body">


<div id="talltweets"></div>
<!-- The PNG image will be added here-->
<div>
  <img id="textScreenshot" />
</div>

基本上,您需要将整个渲染步骤包装到一个函数中,然后可以使用按键事件调用该函数。你已经在正确的轨道上了——这是你可以实现它的一种方法(加上一些杂项代码改进;另外,我不得不更改 html2canvas 的 URL 以从不同的 cdn 中提取,因为原来的是'从 SO 正确加载):

// If we store these, we only need to query the dom once, not on every update
var tallTweets = document.getElementById('talltweets');
var screenshotImg = document.getElementById('textScreenshot');
var textInput = document.getElementById('body');


// Note - it wouldn't surprise me if html2canvas has a specific API
// for doing this kind of update. Worth checking their documentation for.
function updateImage() {
   html2canvas(tallTweets, {
     onrendered: function(canvas) {
       var screenshot = canvas.toDataURL("image/png");
       screenshotImg.setAttribute("src", screenshot);
     }
   });
};
 
function edValueKeyPress() {
 tallTweets.innerText = textInput.value || '';
 updateImage();
}

updateImage();
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>

<input type="text" onKeyPress="edValueKeyPress()" onKeyUp="edValueKeyPress()" id="body" placeholder="Type something!">

<div id="talltweets"></div>
<!-- The PNG image will be added here-->
<div>
  <img id="textScreenshot" alt="Generated screenshot" />
</div>

您还可以通过将两个函数合并为一个来使其更简单 - IE,将 tallTweets.innerText = textInput.value 移动到 updateImage,然后将事件侦听器绑定到 updateImage。但是将它们分开有其优点,特别是如果您可能想在其他地方重用 updateImage