先上一图,这个是最终效果:
再看看闪耀效果:
1、先将文字画在canvas;
2、利用getImageData()获取图像数据;
3、将图像数据中黑色(你可以用其他颜色)按一定间隔取值(获取坐标);
4、在获取的坐标画矩形(你画其他形状也是可以的);
5、使用requestAnimationFrame,变换矩形颜色。
这样就闪烁起来了~~
var i = 0
Page({
/ 页面的初始数据/data: {hideNav: false,colors: ["#fff", "#FF6E40", "#FFAB40", "#FFFF00", "#EEFF41", "#B2FF59", "#69F0AE", "#64FFDA", "#18FFFF", "#40C4FF", "#E040FB", "#FF4081", "#ff5252"],
text: '肖战',scroll: false,setting: false},
/ 生命周期函数--监听页面加载/onLoad: function (options) {let that = this, text = wxgetStorageSync('blinkText') || thisdatatext;thissetData({text})thisinit()},
init() {wxcreateSelectorQuery()select('#canvas')fields({node: true,size: true,})exec((res) => {let that = this,text = thisdatatextconst width = res[0]widthconst height = res[0]height
const canvas = res[0]nodeconst ctx = canvasgetContext('2d')const dpr = 1 //wxgetSystemInfoSync()pixelRatiocanvaswidth = width dprcanvasheight = height dprctxscale(dpr, dpr)i = (canvaswidth - thatgetByteLen(text) 100) / 2ctxfillStyle = "#ffffff";ctxfillRect(0, 0, canvaswidth, canvasheight);ctxfont = "bolder 200px Arial";ctxfillStyle = 'black';ctxtextBaseline = 'top';ctxfillText(text, 0, 100);// ctxlineWidth = 5;// ctxstrokeText(text, 0, 100);let imageData = ctxgetImageData(0, 0, canvaswidth, canvasheight)data;// consolelog(imageData)
ctxfillStyle = "#ffffff";ctxfillRect(0, 0, canvaswidth, canvasheight);
thisdatacanvas = canvasthisdatactx = ctxthisdataimageData = imageDataconsolelog(canvaswidth, canvasheight)// thisdrawText()const renderLoop = () => {thisdrawText()
canvasrequestAnimationFrame(renderLoop)}// canvascancelAnimationFrame(renderLoop)canvasrequestAnimationFrame(renderLoop)})},drawText() {var gap = 7,{imageData,canvas,ctx,text,scroll} = thisdataif (scroll) {if (i >= canvaswidth) {i = -canvaswidth}i += 2}
ctxclearRect(0, 0, canvaswidth, canvasheight)for (var h = 0; h < canvasheight; h += gap) {for (var w = 0; w < canvaswidth; w += gap) {var position = (canvaswidth h + w) 4;var r = imageData[position],g = imageData[position + 1],b = imageData[position + 2];
if (r + g + b == 0) {ctxfillStyle = thisdatacolors[Mathfloor(Mathrandom() thisdatacolorslength)];ctxfillRect(w + i, h, 5, 5);}}}
},toggleSetting() {thissetData({setting: thisdatasetting false : true})},setText(e) {
let that = thiswxcloudcallFunction({name: 'msgSecCheck',data: {op: 'textCheck',content: edetailvalue},success(res) {consolelog('ContentCheck-res', res)if (resresultcode == 300) {consolelog(resresultmsg)wxshowToast({icon: 'none',title: resresultmsg,})thatsetData({'text': ''})} else {thatsetData({setting: false,'text': edetailvalue})thatinit()}},fail(err) {consolelog('ContentCheck-errxxxx', err)
}})
},getByteLen(str) {var len = 0;for (var i = 0; i < strlength; i++) {var length = strcharCodeAt(i);if (length >= 0 && length <= 128) {len += 1;} else {len += 2;}}consolelog('文字长度',len)return len;},donothing() {
},/ 生命周期函数--监听页面初次渲染完成/onReady: function () {
},
/ 生命周期函数--监听页面显示/onShow: function () {
},
/ 生命周期函数--监听页面隐藏/onHide: function () {
},
/ 生命周期函数--监听页面卸载/onUnload: function () {wxsetStorage({data: thisdatatext,key: 'blinkText',})},
/ 页面相关事件处理函数--监听用户下拉动作/onPullDownRefresh: function () {
},
/ 页面上拉触底事件的处理函数/onReachBottom: function () {
},
/ 用户点击右上角分享/onShareAppMessage: function () {
}})
想到小程序中有如此大量的生成需求,而 Canvas 生成方法又是如此难用和坑爹(有关小程序的坑,可看 >
小程序canvas生成转发图时需要canvas隐藏 不能使用 display:none; hidden属性 加上后canvas不能绘图
网上的方法都试过了 都不行最后自己实现了 但是不能进行翻页,有更好的方法欢迎提供 万谢
最先试过这个方法 外层套view ,width height都设为0 模拟器生效 真机不生效
后来查到了 可通过cover-view 自定义view标签 进行遮盖
然后发现真机上 cover-view 按下后带有灰色背景 最后想直接定位到屏外 页面禁止滑动 最后成了
json中加入
最后是行了 反正页面就两按钮不需要滑动, 求更好的方法实现
要知道原的长宽
要知道canvas的长宽
算出比例。先要判断原的宽度是不是大于高度,如果宽度大于高度,那么计算比例是canvas的宽度 / 原宽度 = 比例,假设原图宽度770,高度590,canvas是宽度600,高度300,那么比例就是 600 / 770 = 07792207792207793,用原的宽度乘以这个比例得出来就是600,770 07792207792207793 = 600,然后乘以高度 590 07792207792207793 = 4597402597402598。如果高度比宽度的值大就把canvas的高度 / 原高度,最后用得出来的比例计算canvas高度和宽度。
用drawImage写入到canvas上。
1、首先在电脑中打开文件上传工具,然后在软件页面中,点击菜单栏 新建图标。
2、然后在打开的窗口中,填写ip、账号、密码,点击连接,如下图所示。
3、接着在打开的窗口中,选中本地文件或者,如下图所示。
4、然后将文件直接拖拽到服务器内(如图所示)。
5、完成文件上传,如下图所示就完成了,这样就传输到自己的服务器中了。
以上就是关于小程序:利用canvas制作文字特效全部的内容,包括:小程序:利用canvas制作文字特效、小程序生成海报、生成图片库-Painter、微信小程序Canvas隐藏 不影响canvas绘图处理办法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)