微信小程序 canvas 字体自动换行(支持换行符)
微信小程序 canvas 自动适配 自动换行,保存图片分享到朋友圈 https://github.com/richard1015/News
微信IDE演示代码https://developers.weixin.qq.com/s/WCkpsTm97M7p
function findBreakPoint(text, width, context) {
var min = 0;
var max = text.length - 1;
while (min <= max) {
var middle = Math.floor((min + max) / 2);
var middleWidth = context.measureText(text.substr(0, middle)).width;
var oneCharWiderThanMiddleWidth = context.measureText(text.substr(0, middle + 1)).width;
if (middleWidth <= width && oneCharWiderThanMiddleWidth > width) {
return middle;
}
if (middleWidth < width) {
min = middle + 1;
} else {
max = middle - 1;
}
} return -1;
}
function breakLinesForCanvas(context, text, width, font) {
var result = [];
if (font) {
context.font = font;
}
var textArray = text.split('\r\n');
for (let i = 0; i < textArray.length; i++) {
let item = textArray[i];
var breakPoint = 0;
while ((breakPoint = findBreakPoint(item, width, context)) !== -1) {
result.push(item.substr(0, breakPoint));
item = item.substr(breakPoint);
}
if (item) {
result.push(item);
}
}
return result;
}
Page({ /**
* 页面的初始数据
*/
data: {
id: 0,
info: {}
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
wx.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: '#010101',
animation: {
duration: 400,
timingFunc: 'easeIn'
}
})
console.log(options)
let id = options.id;
let info ={
"title":"asdasd啊啊啊asdasd啊啊啊asdasd啊啊啊asdasd啊啊啊asdasd啊啊啊",
"intro":"我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容我是内容"
};
self.setData({
info
});
self.drawInit(info);
},
canvasIdErrorCallback: function (e) {
console.error(e.detail.errMsg)
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function (e) { },
/**
* 绘制图片
*/
drawInit: function (info) {
var contentTitle = info.title;
var contentStr = info.intro;
var that = this
var res = wx.getSystemInfoSync();
var canvasWidth = res.windowWidth;
// 获取canvas的的宽 自适应宽(设备宽/750) px
var Rpx = (canvasWidth / 375).toFixed(2);
//画布高度 -底部按钮高度
var canvasHeight = res.windowHeight - Rpx * 59;
// 使用 wx.createContext 获取绘图上下文 context
var context = wx.createCanvasContext('secondCanvas')
//设置行高
var lineHeight = Rpx * 30;
//左边距
var paddingLeft = Rpx * 20;
//右边距
var paddingRight = Rpx * 20;
//当前行高
var currentLineHeight = Rpx * 20;
//背景颜色默认填充
context.fillStyle = "#f8f8f8";
context.fillRect(0, 0, canvasWidth + Rpx * 2, canvasHeight);
//标题内容颜色默认
context.fillStyle = "#fff";
//高度减去 图片高度
context.fillRect(Rpx * 15, Rpx * 15, canvasWidth - Rpx * 30, canvasHeight);
//设置标题
var resultTitle = breakLinesForCanvas(context, contentTitle, canvasWidth - paddingLeft - paddingRight, `${(Rpx * 20).toFixed(0)}px PingFangSC-Regular`);
//字体颜色
context.fillStyle = '#000000';
resultTitle.forEach(function (line, index) {
currentLineHeight += Rpx * 30;
context.fillText(line, paddingLeft, currentLineHeight);
});
//画分割线
currentLineHeight += Rpx * 15;
context.setLineDash([Rpx * 6, Rpx * 3.75]);
context.moveTo(paddingLeft, currentLineHeight);
context.lineTo(canvasWidth - paddingRight, currentLineHeight);
context.strokeStyle = '#cccccc';
context.stroke();
//设置内容
var result = breakLinesForCanvas(context, contentStr || '无内容', canvasWidth - paddingLeft - paddingRight, `${(Rpx * 16).toFixed(0)}px PingFangSC-Regular`);
console.log(result);
//字体颜色
context.fillStyle = '#666666';
result.forEach(function (line, index) {
currentLineHeight += Rpx * 30;
context.fillText(line, paddingLeft, currentLineHeight);
}
context.draw();
},
saveImg: function () {
var that = this;
wx.canvasToTempFilePath({
canvasId: 'secondCanvas',
fileType: 'jpg',
success: function (res) {
console.log(res.tempFilePath) // 返回图片路径
wx.showLoading({
title: '保存中...',
mask: true
});
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: function (res) {
wx.showToast({
title: '保存成功',
icon: 'success',
duration: 2000
})
}, fail: function (res) {
wx.hideLoading()
console.log(res)
}
})
}
})
}
})
微信小程序 canvas 字体自动换行(支持换行符)的更多相关文章
- 微信小程序 canvas 文字自动换行
Page({ drawCanvas: function(ctx) {// 地址 ctx.setFontSize() ctx.setFillStyle('#9E7240') ctx.textAlign= ...
- 微信小程序-canvas绘制文字实现自动换行
在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生一定的了问题.如果我们绘制的文本长度不确定或者 ...
- 原创:WeZRender:微信小程序Canvas增强组件
WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...
- 技术博客--微信小程序canvas实现图片编辑
技术博客--微信小程序canvas实现图片编辑 我们的这个小程序不仅仅是想给用户提供一个保存和查找的平台,还希望能给用户一个展示自己创意的舞台,因此我们实现了图片的编辑部分.我们对对图片的编辑集成了很 ...
- 微信小程序--canvas画布实现图片的编辑
技术:微信小程序 概述 上传图片,编辑图片大小,添加文字,改变文字颜色等 详细 代码下载:http://www.demodashi.com/demo/14789.html 概述 微信小程序--ca ...
- 微信小程序使用字体图标
项目中常常需要使用到字体图标,微信小程序中使用字体图标与在平常的web前端中类似但是又有区别.下面以使用阿里图标为例子讲解如何在微信小程序中使用字体图标. 第一步:下载需要的字体图标 进入阿里图标官网 ...
- 微信小程序canvas生成并保存图片
---恢复内容开始--- 微信小程序canvas生成并保存图片,具体实现效果如下图 实现效果需要做以下几步工作 一.先获取用户屏幕大小,然后才能根据屏幕大小来定义canvas的大小 二.获取图 ...
- 微信小程序 使用字体图标 iconfont
第一步:在阿里巴巴矢量图标库下载需要的图标 地址:https://www.iconfont.cn/ 添加至项目 第二步:打开在线代码 将在线代码复制 第三步:点击下载至本地下载图标 将下载的downl ...
- 微信小程序Canvas添加水印字体,通过setGlobalAlpha设置字体透明度。
微信小程序自带的设置透明度只有setGlobalAlpha,但是CanvasContext.setGlobalAlpha设置透明度,是全局透明,整张图片都透明了.所以直接使用是不行的. 换种思路实现: ...
随机推荐
- 【C#复习总结】垃圾回收机制(GC)1
摘要:今天我们漫谈C#中的垃圾回收机制,本文将从垃圾回收机制的原理讲起,希望对大家有所帮助. GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由 ...
- [C#]实现任何数据库类型的DbHelper帮助类
本文章为原创内容,如需转载,请注明作者及出处,谢谢! 一.在System.Data.Common命名空间下,存在这样的一个类: // // 摘要: // 表示一组方法,这些方法用于创建提供程序对数据源 ...
- P2P平台介绍
https://www.ludou.org/tutengdai.html https://www.tutengdai.com/register?invite_code=9991300
- 莫比乌斯反演III
"haik, hen wir." -- somebody 概述 莫比乌斯反演通过一些恒等变形使需要高时间复杂度计算的式子变为可快速计算的. 一般来说,将形如\(\sum_{d|n} ...
- hibernate异常找不到get方法org.hibernate.PropertyNotFoundException: Could not find a getter for did in class com.javakc.hibernate.manytomany.entity.CourseEntity
属性的get方法没找到,可能是CourseEntity类中对应属性没有get方法,如果有就看CourseEntity.hbm.xml属性名称,应该是写错了不和CourseEntity类中属性名相同,修 ...
- 漫谈数组去重复方法(亮点是ES6的新API)
方法1: 利用遍历的思想来进行. <!DOCTYPE html><html lang="en"><head> <meta charset= ...
- JVM原理分析
1 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的.由一套字节码指令集.一组寄存器.一个栈.一个垃圾回收 ...
- vue-lazyload简单使用
vue-lazyload简单使用 npm地址:https://www.npmjs.com/package/vue-lazyload github地址:https://github.com/hilong ...
- git repository description
Git - Plumbing and Porcelainhttps://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain gith ...
- Linux df 与du用法
df 查看一级目录的大小,但是不能查看文件的大小.du 可以查看目录或者文件大小. 1 df的基本用法 df命令可以显示目前所有文件系统的总空间及当前可用空间,用法如下: -a 全部文件系统列表-h ...