找回密码
 立即注册
搜索
查看: 870|回复: 2

[软件] 问题解决 谢谢> <

[复制链接]
     
发表于 2021-2-1 12:05 | 显示全部楼层 |阅读模式
本帖最后由 冰箱研会长e-3M 于 2021-2-1 14:17 编辑

RT, 我写了一个用canvas渲染文字到图片的网页,
基本功能都写出来了, 也如我所想的输出了图片...




现在只有一个问题, 就是每次触发(input)事件, 渲染图片, 获取本地URL之后,
图像元素本身并不会即时刷新, 需要我手动小刷新(f5, 与之相对的大刷新就是ctrl+f5咯, 自造词2333)
canvas似乎也没有刷新...


我试过用reload方法刷新网页本身, 但文字框里的东西也全都没了,
相当于重新请求了index.html...

我看网上有在图像url后面传参的方法, 但是这些图像是本地连接, 下面这种东西, 这玩意是没法传参的吧...

  1. data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABYIAAAGMCAYAAABnKdZ7AAAgAElEQVR4nO3d63KjyLIG0P0kev+35Pzo8Rm1RxegbplZa0U4QtO2ISuroIevEfrfAQAAAABAaf9bXQAAAAAAAGMJggEAAAAAihMEAwAAAAAUJwhmW4/HI9V2V+8Lflh3j
复制代码


虽然也不是不能同, 但每次都需要刷新感觉像给松了的type B口充电一样难受,
想问问泥潭的大佬们有没有好办法

代码:https://github.com/GrandArth/AA-Text_Render

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <title>AA制图器</title>
  6.         <style>
  7.             input {font-family:MS PGothic;font-size:16px;line-height: 18px;white-space:normal;width:80vw;}
  8.         </style>
  9.     </head>

  10.     <body>

  11.         <table>
  12.             <tr>
  13.                 <td>
  14.                     <textarea rows="5" cols="130" name="text" placeholder="Enter text" id="aaText"></textarea>
  15.                     <canvas hidden id="aaCanvas"></canvas>
  16.                 </td>
  17.             </tr>
  18.             <tr>
  19.                 <td>        
  20.                     <img id="resultedImage">
  21.                 </td>
  22.             </tr>
  23.         </table>

  24.         <script>
  25.             var aaCanvasContext = document.getElementById('aaCanvas').getContext('2d');
  26.             var aaCanvas = aaCanvasContext.canvas;
  27.             var textArea = document.getElementById('aaText');
  28.             var imageElem = document.getElementById('resultedImage');
  29.             var inputText = textArea.value;
  30.             var linesOfInputText = inputText.split('\n');
  31.             var widthOfEachLines = linesOfInputText.map(function(text){return text.length;});

  32.             aaCanvas.globalCompositeOperation = "source-over";
  33.             aaCanvas.width = Math.max.apply(null,widthOfEachLines)*8;
  34.             aaCanvas.height = linesOfInputText.length*18;

  35.             document.getElementById('aaText').addEventListener('input', function (){

  36.                 imageElem.src = "";

  37.                 aaCanvasContext.fillStyle = "#FFFFFF";
  38.                 aaCanvasContext.fillRect(0, 0, aaCanvas.width, aaCanvas.height);

  39.                 aaCanvasContext.fillStyle = "#1E1E1E";
  40.                 aaCanvasContext.font="16px MS PGothic";

  41.                 for(var i = 0; i < linesOfInputText.length; i++)
  42.                 {
  43.                     aaCanvasContext.fillText(linesOfInputText[i], 10, 18*(i+1));
  44.                     imageElem.src = aaCanvas.toDataURL();
  45.                     console.log(imageElem.src);
  46.                 }
  47.             }, false);
  48.         </script>
  49.         
  50.     </body>
  51. </html>
复制代码


index.html

2.16 KB, 下载次数: 21

demo

回复

使用道具 举报

     
发表于 2021-2-1 12:24 | 显示全部楼层
如果我没理解错你的意图的话,代码里有别的问题。linesOfInputText不会更新,这样肯定是什么都不渲染的,可以用一下chrome,firefox,edge之类的开发者工具,看一看执行过程。

评分

参与人数 1战斗力 +1 收起 理由
冰箱研会长e-3M + 1 感谢

查看全部评分

回复

使用道具 举报

     
 楼主| 发表于 2021-2-1 12:28 | 显示全部楼层
maritimus 发表于 2021-2-1 12:24
如果我没理解错你的意图的话,代码里有别的问题。linesOfInputText不会更新,这样肯定是什么都不渲染的,可 ...

啊! 确实!
我完全没注意到...太丢人了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-24 17:12 , Processed in 0.028537 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表