微信小程序之画布,给图片添加圆角,画圆,文字换行(按照长度换行,按照/r/n换行水平居中)

2023-11-07

一、画布,图片添加圆角

/**
 * 自定义函数roundRect
 * 画圆弧
 * ctx >> 画布
 *bg_x 图片的x坐标
 *bg_y 图片的y坐标
 *bg_w 图片宽度
 *bg_h 图片高度
 *bg_r 图片圆角
 *
 */
function roundRect(ctx, img, bg_x, bg_y, bg_w, bg_h, bg_r) {
  // 开始绘制
  ctx.save();
  ctx.beginPath();
  // var bg_x = 15;
  // // 图片的y坐标
  // var bg_y = 270;
  // // 图片宽度
  // var bg_w = 68;
  // // 图片高度
  // var bg_h = 92;
  // // 图片圆角
  // var bg_r = 5;
  ctx.arc(bg_x + bg_r, bg_y + bg_r, bg_r, Math.PI, Math.PI * 1.5);
  ctx.arc(bg_x + bg_w - bg_r, bg_y + bg_r, bg_r, Math.PI * 1.5, Math.PI * 2);
  ctx.arc(bg_x + bg_w - bg_r, bg_y + bg_h - bg_r, bg_r, 0, Math.PI * 0.5);
  ctx.arc(bg_x + bg_r, bg_y + bg_h - bg_r, bg_r, Math.PI * 0.5, Math.PI);
  ctx.clip();
  ctx.drawImage(img, bg_x, bg_y, bg_w, bg_h);
  // 恢复之前保存的绘图上下文
  ctx.restore();
}
//使用:
util.roundRect(ctx, '图片路劲', 20, 20, 100, 135, 10);

二、画布,画圆

/**
 * 自定义函数roundRect_yuan
 * 画圆
 * ctx >> 画布
 *x圆的x坐标
 *y圆的y坐标
 *size 圆半径
 *
 */
function roundRect_yuan(ctx, x, y, size) {
  // 开始绘制
  // 圆形位置 大小
  // var x = 120;
  // var y = 130;
  // var size = 60;
  ctx.save(); // 保存
  ctx.beginPath(); // 开始绘制
  // ctx.arc(100, 75, 50, 0, 2 * Math.PI)
  ctx.arc(size / 2 + x, size / 2 + y, size / 2, 0, Math.PI * 2, false);
  ctx.clip();
  // 恢复之前保存的绘图上下文
  ctx.restore();
}
//使用:
util.roundRect_yuan(ctx, 100, 100, 70);

二、画布,文字换行
按照指定宽度换行

/**
 * canvas文本自动换行,注意调用前要设置字体,例如: ctx.font = '12px Arial'
 * @param {*} ctx CanvasRenderingContext2D
 * @param {*} text  文本
 * @param {*} x 
 * @param {*} y 
 * @param {*} lw 所占宽度
 * @param {*} lh 行高
 * return 绘制文本所需的高度
 */
const fillTextLineBreak = (ctx, text, x, y, lw, lh, color = '#000', font = '14') => {
  var i = 0;
  var n = 0;
  var r = -1;
  var initHeight = 0;
  ctx.font = "" + font + "px Arial"; //字体大小
  ctx.fillStyle = color; //字体颜色
  while (i < text.length) {
    while (ctx.measureText(text.substring(n, i)).width < lw && i < text.length) {
      i++
    }
    r++
    ctx.fillText(text.substring(n, i), x, y + lh * r)
    n = i
  }
  initHeight = lh * r;
  wx.setStorageSync('initHeight', initHeight);
}

//使用:
util.fillTextLineBreak(ctx,'文本内容', 20, 580, 322, 20); // 自动换行

按照换行符(/r/n)换行

/**
 * canvas文本自动换行,根据换行符换行,水平居中
 * text文本内容
 * x轴坐标
 * y轴坐标
 */
function fillTextLineBreakcount(ctx, text, x, y) {
  var initHeight = 0; //行高
  var textArray = text.split('\r\n');
  ctx.font = "normal 500 16px Arial"; //字体大小
  ctx.fillStyle = "#fff"; //字体颜色
  ctx.textAlign = "center";//文本居中
  for (let i = 0; i < textArray.length; i++) {
    ctx.fillText(textArray[i], x, y + initHeight)
    initHeight = initHeight + 20;
  }
}
//使用:util.fillTextLineBreakcount(ctx,'测试第一行\r\n测试第二行',当前画布宽度除以2, y轴坐标); // 自动换行

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

微信小程序之画布,给图片添加圆角,画圆,文字换行(按照长度换行,按照/r/n换行水平居中) 的相关文章

  • 在响应模式下使用 CSS 更改元素顺序

    图1为桌面模式 下面两张图片和文字 总共三个div 图 2 是我希望它在移动浏览器 例如手机 中的显示方式 关于如何实现这一点有什么想法吗 我愿意接受任何建议 这个想法是让文本显示在图像上方 以最好地说明这两个图像的描述 在桌面版本中将文本
  • 简化 CSS 代码

    我怎样才能简化这段代码 user panel subscribe user panel faves user panel tags user panel title user panel calendar a user panel item
  • 这个 CSS 选择器是什么? [类* =“跨度”]

    我在 Twitter Bootstrap 中看到了这个选择器 show grid class span background color eee text align center border radius 3px min height
  • 交替 div 使图像向左(偶数)或向右(奇数)

    我正在尝试更好地排列图像 而不仅仅是一列中的图像 请参阅附件中的示例 每篇文章的图像可以位于左侧和右侧 这是我的代码 HTML section class content list page section
  • 如何设置引导开关的 css 颜色?

    如何在此引导开关中将蓝色更改为另一种颜色 我尝试更改输入元素的颜色和背景颜色 但它没有更改开关颜色 这是 html 和 bootstraplink https getbootstrap com docs 4 2 components for
  • CSS 中 calc() 的结果是什么

    我们现在已经开始使用calc 在CSS中 用于设置计算结果的宽度 例如 div div div div parent width 100px calcWidth width calc 100 3px height 100px backgro
  • 显示带有背景颜色的百分比条

    例如 如果我有一个包含两列和 2 行的表 Col1 Percentage 50 50 70 70 如何用代表 COl1 值的颜色填充百分比列 像这样的东西 您可以使用具有两个紧接着的停止点的线性渐变 percentageFill heigh
  • CSS 选择器用于选择最后两个子项,而不知道列表中有多少项

    我有一个无序列表 它有时包含 4 5 6 或 7 个项目 我想知道是否有一个 CSS 选择器来选择最后两项 我意识到 last child会给我最后一件物品 是否有 倒数第二个孩子 选择器 或者 孩子数量 2 选择器 HTML ul li
  • React Native 上的文本缩进

    我需要缩进 React Native 段落的第一行 但使用常见的csstext indent财产 textIndent 与 React Native 不兼容 伪元素选择器也不兼容 例如 first line 有什么方法可以做到这一点而不用将
  • 由于固定导航,增加了 FancyBox v2 的顶部和底部边距

    我目前正在开发一个网站 该网站将来将具有响应能力 该网站主要由图像组成 单击这些图像会加载到 FancyBox 中 FancyBox v2 现在具有响应能力 因此可以在屏幕尺寸发生变化时重新调整图像等的大小 作为我设计的一部分 我有两个固定
  • 显示班级图片 10 秒

    我有下面给出的代码显示9 boxes 其值如下digital time 还有一个班级box002显示digits相当于随机选择的九个盒子的值 box002 can be dragged to digital time starting wi
  • 两种颜色边框

    客户想要两种颜色的边框以获得浮雕外观 我可以在一个元素上执行此操作吗 我希望避免堆叠两个具有单独边框的 DOM 元素 是的 使用outline财产 它充当您边界之外的第二个边界 但请注意 它可能会以一种奇怪的方式与边距 填充和阴影进行交互
  • Chrome 扩展屏幕截图部分图像裁剪适用于 Retina 显示屏

    我制作了一个 chrome 扩展 它捕获网站的单个元素 div 我使用 chrome tabs gt captureVisibleTab 来制作屏幕截图 然后 使用元素 div 的坐标 x y 和大小 宽度 高度 裁剪屏幕截图 这对我来说在
  • IE7 显示问题:菜单中的表格

    我写了一个菜单样式 在 IE8 FF3 6 GC7 中运行良好 现在的问题是 我的老板希望它甚至可以在 IE7 上运行 我真的很努力地让它在 IE7 上运行 但无法获得相同的外观 menu css a outline none menu m
  • 垂直对齐复选框标签? [复制]

    这个问题在这里已经有答案了 我有这样的复选框
  • 禁用引导列上的滚动

    我正在尝试禁用引导列上的滚动 这是我的代码 div class container fluid h 100 div class row h 100 div class col 4 h 100 bg dark fixed div div cl
  • 如何重置使用 JavaScript 更改的 CSS 属性?

    我的导航按钮的宽度从 100px 增加到 150px 当鼠标悬停在 nav li hover width 150px 但是使用 javascript 我已经做到了 无论选择哪个选项 宽度都将继续为 150px 当选择每个选项时 它会使其他选
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • 如何更改bootstrap中form-control弹出窗口中必填字段的默认消息?

  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline

随机推荐

  • linux进程及进程间同步通信机制

    进程 一 进程的存储器安排 这是 UNIX环境高级编程 中介绍的典型存储器安排 但现实也不一定非要如此 对于c c 来说 数据的存储方式还是认为3种 堆 栈 全局数据区 包括全局数据 静态数据 常量 二 僵尸进程和孤儿进程 进程在终止前向父
  • shiro基础

    shiro基础 shiro中有三大核心架构 subjects security manager realms 分别代表 使用shiro的主体 核心安全管理器和数据和安全管理的连接 使用shiro首先需要引入shiro需要的依赖 可以通过ma
  • 前端如何进行用户权限管理

    1 问题 假如在做一个管理系统 面向老师学生的 学生提交申请 老师负责审核 或者还需要添加其他角色 功能权限都不同 现在的问题是 每种角色登录看到的界面应该都是不一样的 那这个页面的区分如何实现呢 2 要不要给老师和学生各自设计一套页面 这
  • [论文阅读]《Database Maanagement Systems》-第九章

    第九章 TREE STRUCTURED INDEXING 树结构索引 P271 301 gracefully 优雅的 适当的 because it adjusts well to changes 因为它能很好地适应变化 page bound
  • 2013年11月21日星期四(地图)

    初始 DDraw BOB bob BOB textures tool mytool char buffer 80 BITMAP FILE bitmap8bit int world x 0 current position of viewin
  • 【vue2对接萤石云接口,实现摄像头直播页面的调取显示】

    vue2对接萤石云接口 实现摄像头直播页面的调取显示 使用ezuikit js插件 accessToken url 附上最新代码和demo 公司前端vue项目需要实现萤石云接口对接 买好萤石摄像头 注册萤石云账号并将设备添加到萤石云平台 开
  • 端口被占用怎么办?关闭占用端口的进程

    当你发现某个端口被占用时 但不知道是哪一个进程占用了端口 需要关闭占用该端口的进程 1 启动系统命令行 windows系统 win r 2 输入命令 netstat ano 可查看所有端口的使用情况 netstat aon findstr
  • Buck电路

    如果我们希望得到一个20V的直流电压源 我们能想到什么办法 很简单 从220V市电开始 通过变压器降压得到有效值为20V的电压 通过整流桥整流得到不稳定的直流电 接着用一个大的电解电容滤波 就可以得到20V的电压 那么如果我们现在希望得到一
  • 微信python小课_微信上其实还有很多你不知道的事,Python微信平台开发编写实录...

    本文主要讲述如何利用Python开发微信公众平台 说明 如果你是Python小白 爬虫小白 觉得本节课程的代码晦涩难懂 没关系 不需要懂 按照步骤一步步操作就可以了 这一节我们主要是搭框架 几乎没有真正的爬虫代码 这些代码和操作 你可能一生
  • POI生成excel表格——简单例子

    导入包 poi 2 5 1 jar User类 提供数据用 package com xk poi import java util ArrayList import java util List public class User priv
  • Linux 关于读者与写者同步互斥问题的解析

    在操作系统课程中 读者与写者问题 或是称作生产者与消费者问题 一直是同步与互斥问题的经典例子 在大学的操作系统课程中也是作为经典例子进行讲解 今天我们就来解析一下读者与写者的互斥同步关系 首先要做的是先了解一下问题的内容 首先需要肯定的是先
  • pycharm的使用技巧与遇到的问题

    文章目录 pycharm的console控制台无法使用 python运行时报错can t find main module in xxx 的解决办法 设置用ctrl 鼠标滚轮调整代码字体大小 console中无法导入常用标准库 刚安装的py
  • 【C++基础】公有继承,保护继承,私有继承

    目录 公有继承 public 保护继承 protected 私有继承 private 公有继承 保护继承 私有继承小结 公有继承 public 公有继承 对父类的公有成员和保护成员的访问属性不变 子类 派生类 的新增成员可以访问基类的公有成
  • Python中的UI设计程序Designer配置

    1 确认安装了Designer 我的基本开发环境是由安装Anaconda后一体化配置的 因此随之也安装了Designer应用程序 具体到我的电脑而言 安装后的路径是 E Python Anaconda3 Scripts designer e
  • 日志正则表达式模板

    结果 logger error Logger e getMessage n tat this getClass getName Thread currentThread getStackTrace 1 getMethodName Threa
  • 2021最新 阿里云上云--从自建服务器到选择阿里云

    上云前序 我们公司因为业务需求 需要来服务器托管微信公众号平台 之前我们先是自建服务器 然后就是使用IDC机房托管服务器 后来因为种种原因 最后转到了阿里云上云 很多同学会有疑问 为什么已经有了自建服务器 还需要去IDC机房托管 最后又去上
  • JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法...

    用window open打开一个窗口 怎么使它一直在父窗口的上面 除非点击自己设置的关闭按钮 我试了一下 nblur self focus 好像不管用 可使用 opened window open demo html demo left 8
  • C++虚基类、虚函数、虚析构函数、纯虚函数

    什么时多态 多态 即多种形态 是一种 泛型技术 它企图使用不变的模板代码来实现可变的算法 在C 中 多态分为两种 静态多态 就是说在编译时就能确定函数地址 通过复用函数名实现 如函数重载 运算符重载 动态多态 就是能够在运行时确定函数地址
  • 阿里easyexcel 2.x实现百万级海量数据效率导入导出demo

    https github com wojozer easyexcel demo
  • 微信小程序之画布,给图片添加圆角,画圆,文字换行(按照长度换行,按照/r/n换行水平居中)

    一 画布 图片添加圆角 自定义函数roundRect 画圆弧 ctx gt gt 画布 bg x 图片的x坐标 bg y 图片的y坐标 bg w 图片宽度 bg h 图片高度 bg r 图片圆角 function roundRect ctx