【问题标题】:add text on image using Javascript and Canvas使用 Javascript 和 Canvas 在图像上添加文本
【发布时间】:2019-05-20 04:38:51
【问题描述】:

我对此主题有疑问
How to add text on image using Javascript and Canvas

我无法在第一时间获得图像。但是当我点击刷新时会加载图像。

这是我的 php 文件中的代码:

<canvas id="canvas"> </canvas>
<form class="myNameForm">
    <?php echo '<img style="display:none" class="myimage" 
        src="./save/'.$filenamewithoutExt.'" crossorigin="anonymous">';?>
    <label class="inpLable" for="input">Enter Name: </label>
    <input class="inp" maxlength="12" type="text" id="inp"/>
</form>

这是我的 js 文件中的代码:

window.onload = function() {
    var canvas = document.getElementById('canvas'),
        ctx = canvas.getContext('2d');
    canvas.width = $('img').width();
    canvas.crossOrigin = "Anonymous";
    canvas.height = $('img').height();
    ctx.drawImage($('img').get(0), 0, 0);
    $(document).on('input', '#inp', function() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.font = "20pt Verdana";
        ctx.drawImage($('img').get(0), 0, 0);
        ctx.fillStyle = "white";
        ctx.fillText($(this).val(), 170, 590);
    });
};

【问题讨论】:

  • 发布您的代码,向我们展示您到目前为止所做的尝试。
  • 尝试使用fabric.js
  • @Mirakurun 我已经更新了问题并添加了代码。
  • 问题是因为“图像异步加载”,但我无法修复它。 stackoverflow.com/questions/30009528/…
  • 我猜问题是&lt;img&gt;display: none 因此它可以没有offsetWidth

标签: javascript php html canvas


【解决方案1】:

我对你的代码做了一些小的改动

<canvas id="canvas"> </canvas>
<img style="display: none" class="myimage" src='https://picsum.photos/200/200'/>
<label class="inpLable" for="input">Enter Name: </label>
<input class="inp" maxlength="12" type="text" id="inp"/>

还有 JS

$('#inp').on('input', function(){
  var canvas = document.getElementById('canvas'),
  ctx = canvas.getContext('2d');
  canvas.width = $('img').width();
  canvas.crossOrigin = "Anonymous";
  canvas.height = $('img').height();
  ctx.drawImage($('img').get(0), 0, 0);
  ctx.clearRect(0,0,canvas.width,canvas.height);
  ctx.font = "20px Verdana";
  ctx.drawImage($('img').get(0), 0, 0);
  ctx.fillStyle = "white";
  ctx.fillText($(this).val(), 10, 50);
});

在这里我创建了一个有效的JSFiddle

【讨论】:

  • 但是当用户开始输入时图像会加载。我希望在页面加载时加载图像。不是在用户开始输入时。
  • 所以您希望图像仅在刷新后显示,但显示刷新前输入的内容?页面卸载时(包括刷新期间)清除画布。因此,您必须以某种方式存储用户输入(服务器端,或者在本地使用会话存储或本地存储或类似的东西),然后在页面加载时从那里加载文本并重新创建画布图像。跨度>
猜你喜欢
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2013-02-13
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多