【前端】canvas图片加文字

2024-01-24

注释标记了操作步骤:

import React, { Component, createRef } from 'react';

class CertifyImgRender extends Component {
  $bgRef = createRef<HTMLCanvasElement>()
  $textRef = createRef<HTMLCanvasElement>()
  
  async renderImage() {
    const img = new Image()
    img.crossOrigin = "anonymous";
    const canvas = this.$bgRef.current;
    const ctx = canvas.getContext('2d');
    img.onload = async () => {
      canvas.width = img.width;
      canvas.height = img.height;

      ctx.drawImage(img, 0, 0);
      //1.绘制文字样式
	  ctx.font = "bold 36px Arial";
      ctx.fillStyle = "black";
      let name = "Abbbb,aeee aaaaaaa aaaaa aaaaaaaa"
      let name2 = "尼古拉"
      //2.一般英文为16个字符换行 中文为四个字符
      const maxLength = 4; 
      let formattedName = '';
      let index = 0;
      const lineHeight = 36; // 由于字号为36所以行高设为36
	  //3.拼接换行符
      while (index < name2.length) {
        formattedName += name2.slice(index, index + maxLength) + '\n';
        index += maxLength;
      }
      // 4.根据换行符分割文字为多行
      const words = formattedName.split('\n');
      let y = 396;
      //5,换行打印
      words.forEach((line) => {
        ctx.fillText(line, 350, y);
        y += lineHeight;
      })
      // 6.将Canvas内容转换为Blob对象
      canvas.toBlob(function (blob) {
        var file = new File([blob], "image_with_text.png", { type: blob.type });
        // 发送给后端
        console.log("file",file)
      }, "image/jpeg");
    }
    //替换为真实的图片路径
    img.src = "放需要加文字的图片地址"

  }

  componentDidMount() {
    // console.log(this.props)
    this.renderImage()
  }

  componentDidUpdate() {
    this.renderImage()
  }

  render() {
    return (
      <div data-rrr>
        <canvas ref={this.$bgRef} style={{ width: "100%", height: "100%" }} />
      </div>
    )
  }
}

export default CertifyImgRender
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【前端】canvas图片加文字 的相关文章

随机推荐

  • PHP高校二手物品交易系统-计算机毕设 附源码04827

    PHP高校二手物品交易系统 目 录 摘要 1 绪论 1 1 研究背景 1 2
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 港科夜闻|叶玉如校长出席世界经济论坛「冬季达沃斯」,为人口老化等议题出谋献策...

    关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1 香港科大校长叶玉如教授出席世界经济论坛 冬季达沃斯 为人口老化等议题出谋献策 2024年世界经济论坛年会的主题是 重建信任 论坛召集了来自120个国家的2 800多位领导者 叶校长作
  • SpringCloud Bus动态刷新全局广播

    文章目录 代码地址 配置项目 配置修改 测试 SpringCloud Bus动态刷新定点通知 代码地址 地址 https github com 13thm study springcloud tree main days11 20Bus 配
  • [机缘参悟-132] :《洞见》:为什么佛学是真的 -3- 冥想,洞见自己的内心

    目录 一 佛家修行的方法 二 冥想 2 1 冥想步骤 2 2 冥想的好处 2 3 冥想的方法 一 佛家修行的方法 佛教修行是指追求智慧 慈悲和解脱 以最终实现觉悟和解脱的过程 它包含了广泛的修行方法 以下是一些常见的佛教修行方法 冥想 冥想
  • 2024年华为Harmony OS走到新里程碑:取代iOS成为国内第二大智能手机操作系统

    前言 如果要问2024年最火的技术是什么 那鸿蒙开发必须占据一些位置 HarmonyOS是华为自主研发的物联网操作系统 经历四年多的发展已构建起全新的智慧生态体系 彻底改变了智能终端的交互方式 当时鸿蒙生态的智能设备已超过7亿台 同时还带来
  • 【算法】使用BFS算法(队列、哈希等)解决最短路径问题(C++)

    文章目录 1 前言 1 1 什么是最短路问题 1 1 1 什么是权值 1 2 如何解决此类最短路径 1 3 BFS解最短路径 前提 FloodFill 洪流问题 2 算法题
  • AI 赋能绿色制冷,香港岭南大学开发 DEMMFL 模型进行建筑冷负荷预测

    近年来 城市化进程加速所带来的碳排放量骤增 已经严重威胁到了全球环境 多个国家均已给出了 碳达峰 碳中和 的明确时间点 一场覆盖全球 全行业的 绿色革命 已经拉开序幕 在一众行业中 建筑是当之无愧的能耗大户 其中又以暖通空调 Heating
  • Python 使用 NoSQL 数据库的优选方案

    NoSQL 数据库因其高性能 可扩展性和灵活性而风靡一时 然而 对于 Python 程序员而言 选择合适的 NoSQL 数据库可能会令人困惑 因为有多种选择可供选择 那么 哪种 NoSQL 数据库最适合 Python 呢 2 解决方案 根据
  • 网工内推 | 上市公司同程、科达,五险一金,年终奖,最高12k*15薪

    01 同程旅行 招聘岗位 网络工程师 职责描述 1 负责职场 门店网络规划 建设 维护 2 负责网络安全及访问控制 上网行为管理和VPN设备的日常运维 3 负责内部相关网络自动化和系统化建设 4 优化与提升网络运行质量 制定应急预案 人员培
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 题解 | #判断两个IP是否属于同一子网#

    求求大家投下腾讯吧 一直在捞人 求求大家投下腾讯吧 一直在捞人 垂直领域大模型 文档图像大模型的思考与探索 分享一个大模型3D可视化的项目 释放一个比亚迪hc 这样改简历 春招通过能提升50 吗 OPPO校招笔试原题 记录一波秋招结果 伯恩
  • 【安全-SSH】SSH安全设置

    今天发现自己的公有云服务器被攻击了 在这里插入图片描述 https img blog csdnimg cn direct cafdca04646f4b8b838400ec79ac282f png 然后查看了登录日志 如上图 ls sh va
  • RabbitMQ环境配置

    文章目录 安装Erlang 安装RabbitMQ 安装Erlang 下载地址 http erlang org download otp win64 25 3 2 7 exe 安装RabbitMQ 下载地址 https www rabbitm
  • 【安全】网络安全态势感知

    文章目录 一 态势感知简介 1 概念 2 形象举例 3 应具备的能力 二 为什么要态势感知 为什么网络安全态势感知很重要 三 态势感知系统的功能 四 如何评估态势感知的建设结果 五 什么是态势感知的三个层级 四 业界的态势感知产品 1 安全
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser
  • 记录xxl-job重复执行引发业务问题

    业务问题描述 1 创建运单 发现重复 同一个车架号两条记录 2 通知重复反馈 A系统读取中间表状态为未处理数据 推送到B系统 原因分析 1 以上两个问题都是xxljob定时执行的 2 通过日志分析 读取中间表数据 同一条数据被多次处理 针对
  • 网络安全行业热门认证证书合集

    网络安全认证证书 就和学历一样是敲门砖 拿到了可以用不到 但不能没有 技术大牛可以没有证书 但普通人不能没有 1 初级入门 就像学历在职场上展示一个人的基本素养一样 网络安全认证证书可以展示一个人在网络安全领域具备的基本知识和技能 它为初学
  • 【加解密篇】电子数据取证分析之特殊的自加密BitLocker解密

    加解密篇 电子数据取证分析之特殊的自加密BitLocker解密 数据加解密通常是个耗时费力的事情 蘇小沐 1 实验环境 Windows 11 专业版 23H2 22631 3007 一 自动开启BitLocker之天坑 1 经验之谈 在20
  • 【前端】canvas图片加文字

    注释标记了操作步骤 import React Component createRef from react class CertifyImgRender extends Component bgRef createRef