小程序做自定义分享封面图,Canvas base64图片数据真机上不显示?【已解决】

首选说一下需求,做一个小程序分享,但是封面图要自定义,除了要有对应商品还有有背景图,商品名。类似这种

实现逻辑,把商品图和背景图,再加上价格和商品名用canvas 渲染出来

这是弄好之后的效果图,里面的背景色和商品图还有商品名称,价格这些可以自定义

具体实现步骤

1,写一个 canvas标签,写好对应的canvas-id="myCanvas" ,设置宽高

2,这个主要是有图片文字组成,图片渲染到canvas的话我们需要先转成bese64,完成之后在工具上就可以到了,但是这个时候真机是看不到的,需要我们把base64数据通过wx.getFileSystemManager方法写入一下,这样真机就可以访问了

3,写好之后我们就可以写入文字调整对应的位置就可以了

 好了下面开始吧,本来想直接沾全部代码的,后面想想还是一步一步来,只要一步一步调试好,基本不会出问题了,好了,下面开始

1,我们要想做这么图的话,因为是动态的,所以这里的图片我们要用canvas画出来

定义一个canvas标签

<canvas canvas-id="myCanvas" style="width: 508.47rpx; height: 406.78rpx;position: fixed;left: -800px;"></canvas>

注意这里fixed;left: -800px; 在调试阶段可以去掉要不然看不到效果图了 

2,定义好标签后我们就需要给他画出来,首先我们画canvas的话需要用本地图,或者用base64

因为我们商品图都是动态的所以这里只能用base64,我们需要在画图之前先把我们需要渲染的图片改成base64数据

urlTobase64(url) {console.log('ruw', url)wx.request({url: url,responseType: 'arraybuffer', //最关键的参数,设置返回的数据格式为arraybuffersuccess: res => {//把arraybuffer转成base64let base64 = wx.arrayBufferToBase64(res.data);//不加上这串字符,在页面无法显示的哦base64 = 'data:image/jpeg;base64,' + base64// this.lineBg = base64this.writecommodityImg(base64)//打印出base64字符串,可复制到网页校验一下是否是你选择的原图片呢// console.log('base64=>', this.lineBg)console.log('kais')const ctx = uni.createCanvasContext('myCanvas', this); // 获取 Canvas 上下文// 绘制背景图像let bg ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAYAAABJ/yOpAAAAAXNSR0IArs4c6QAAHAJJREFUeF7tXQecFOX5fuZ65ZAmFjAq0VgSBTUgKBo19C4gRZAuIgIKAtJsKILwVyFSVQQDFpqIIhbsikTFWKJooigE6ccd19vuP8/ODDs7N9+Wu+N2j32/32+5Y+abrzzzPvPW2dNcM9q4IU0QEAQcEdCEICIZgoAaASGISIcg4AcBzTVdTCyREEFAhYAQRGRDEBANIjIgCFQMAc01rW3wUazYOODCVsD5zYEzzwfS6kBLTK7YzHKVIFANCLiLCoCcTGDvD8AP24HvPgbKSoOeWSsLliAXt4b218HQ6pwW9ODSURCINATcmfvgfms58O0HQS0tMEE0DVrb4dBa9QhqQOkkCNQEBNwfr4f7jWWA278BpZVNDWBitRmCmNa9a8KeZY2CQEgIuN5/EaA28eek+yXIha2g9Z0GTdNCmlg6CwI1AQG32w338zN1v0TRtLKp7Zx1TEwstLFLodU9vSbsVdYoCFQIAfeRvXA/cSvgKnO8XiuboiDIRa0Q029ahSaViwSBmoSAa/VM4F/OWkRNkJ4TENP0+pq0T1mrIFAhBFxfvgOsfdRZg5QqNEjMuKXQ6jeq0IRykSBQkxBwH9oD1+MjFAS5x9nEipmxDlpSSk3ap6xVEKgQAu7CPLge6KkiSHtHJz324c0VmkwuEgRqIgJlUzoIQWrijZM1Vw8CaoJMVmiQWaJBqufWyCyRgEDZPSoNIgSJhPsjawgzAkKQMN8AmT6yEVASpGRSB0cnPe6R1yJ7R7I6QaAKESid3NHZSReCVCHKMlSNRUAIUmNvnSy8OhBQE2SiwsSaLSZWddwYmSMyECidpDKxhCCRcYdkFWFFwA9BOjo76bNfDeuCZXJBoDoRKJ3USeGk360gyBwhSHXeIJkrvAiUThSChPcOyOwRjYCSIMUKDRIvGiSib6gsrmoRKFFpkOIJziZW/KNiYlXtLZDRIhmBkrsVJlbxhE6OTnr8o5sieT+yNkGgShEoubuzs5MuBKlSnGWwGoqAmiDjFRpkrmiQGnqvZdkVQKBkgkqDCEEqAKdccrIhIAQ52e6o7KdKEVASpOguZxMrYZ6YWFV6B2SwiEageLzCxCq6q7NjFCth3isRvSFZnCBQlQgUj+/iHMUSglQlzDJWTUVATZA7FRrk/0SD1NSbLesOHYHiu1QaRAgSOppyxUmHgBDkpLulsqGqREBNkHFdnJ30xzZW5fwyliAQ0QgU39nV2UkvVBAkUQgS0TdUFle1CBQJQaoWUBnt5EJATZCxziZW4uNiYp1cIiC78YdA0TiViSUEEckRBOCHIF0dnfTEx18W2ASBqEGgaFw3hZM+RkGQJ4QgUSMdslEUjRWCiBgIAkoEhCAiHIKAHwSUBCm4w9nESpovJpZIVPQgUDhGYWIV3NHN0UlPmr8hetCRnUY9AoVjujs76UKQqJcNAQCAmiCjFRpkgWgQkZzoQaDwDpUGEYJEjxTITpUICEFEOAQBPwioCXJ7d2cn/W/rBVBBIGoQKBzdw9lJz1cQJFkIEjXCIRsFCoQgIgaCgBoBNUFGOZtYyU+KiSUCFT0IFNyuMrGEINEjBbJTJQJ+CNLD0UlPfnKdwCkIRA0CBbffqHDSb1MQZKEQJGqkQzaKglFCEBEDQUBtYqkIkqfQICmiQUScogiBfCVBRjqbWCmLxMSKIvmI+q3m36YwsfJG3ujopKcsWhv1oAkA0YNA/m09nZ10IUj0CIHsVI2AmiC3KjTIYtEgIlDRg0D+SJUGEYJEjxTITpUICEFEOAQBPwgoCZI7wtnESl0iJpZIVPQgkHerwsTKHdHTMYqVumRN9KAjO416BPJu7eUcxRKCRL1sCAAA1AQZrtAgS0WDiOREDwJ5I1QaRAgSPVIgO1UiIAQR4RAE/CCgJsiwXs5O+rKXBFBBIGoQyBveW+GkC0GiRghko2oElATJURAkTTSIyFMUIZCr0iA5Q51NrLSnxMSKIvmI+q3mDlOYWEKQqJcNAQCAH4L0dnTS0556UYATBKIGgdxhNzk76TlDFAR5WggSNdIhG0XuUCGIiIEgoERACCLCIQj4QUBJkGODnU2s9GfExBKJih4EcoYoTKxjg29ydNLTn3khetCRnUY9AjlD+jg76UKQqJcNAQCAmiCDFBpkuWgQkZzoQSBnsEqDCEGiRwpkp0oEhCAiHIKAHwTUBLmlj7OT/uzzAqggEDUI5Azq6+ykZysIUksIEjXCIRsFjglBRAwEATUCaoIMdDaxaq0QE0sEKnoQOHaLysQSgkSPFMhOlQj4IUhfRye91orVAqcgEDUIHLuln8JJH6AgyEohSNRIh2wUxwaeDARxu4DSfMCVD5QVAq5SwF0CQNM//CEtMhDw2CX8xw3EJABaLBCbBMSm6B8tJjLWaaxCSZAshQbJiCQNQjIUHwXK8gCShKC7DfA9N0FaZCNgPsDMnzFAbCqQcIpOmgho2SoNknWzs4mV8VwEmFiuEqDoIFCaq5PCRXIYH5Mgnp88Ji0yEYgBNCtBqDligBj+1IC4NCCxARATH9blZw9QmFgRS5DiTKDoMOAuc/6QFD4koVYh5p5/wgp2dE/O+2Cau/xpIwdNLadPYj0goU7YoPNDkH6ONkrGc6vCs1iaUAV7da3hLgVcJEiJ8Tt9Dn6oMXjcThLhRnhumm1WU6Ks5PD4HCQHNUocEBOn/9TigRgej9O1SfIZYfFPsgf0d45iZfVXEOTvYSAIyZC/2/A1SA4So0T/aX6oUTzksBHE4xMad0YUSPh44kMOLsPQIh5ixBoksRCEDjzNK35IEvomqY2NvtW3jeybI50g1AZ5vwJluYCrWP+U8WeRQZJinRSeyJXND/E47QaYHnKI4159omWfSbPdC7uJRf/D0B4eUiQAsSSJ5UNNknJWtWqSyCcINUdxlk4IfsqMnyZZjptb1CAkhOmYO5FBCBJWgpSb3FDpHjOLGiXWa1Z5tEciEJsIxCQZvycA8bWBlMbVtg01QfopTKxV1Whi0Rmn3+HRGgVGjsMgiZtahFqDxKDPYYZ5DU1B7E2/3EeLVBu2MpEVAes98LkvVsfdiGR5iEJzi9rDIIgnV0KiJOj+CJ33amjZ/RUm1tF+/R0ft7VX/b0alkWZLwaO7TRIYZCDeQ9+rM65J5RrmlJuPTpCn8PjCFrNKnFAqufG+ZvF9qQy75PHRzQjW7zedNhJFBKE5lay5ZMIpP9BP36CW1b/m52d9LATJG+XHs71aA7j42KW3Ko5zKSgyQUrMRTI5RYCh4+VP5mSCDTIOMFwhzg88zu7D5e/6HcNvMdU+7FfVT8DSE0McQGW7nt4L2x5pTPrAnF0sCvZfB5oHMv0T4wolocg1CAkCTPuSUBifSD1d5WcOPDlaoL0VWiQ1dWgQaglsr81iMHyEdO8IjlYQmL4G4H3V75HQTEwdBHwwz7fc31bARM6Bzfik28A/z0SXN92lwLnnAosfCNw/7PqAyP/6ttvwnPAu//yHjslFXh7uvf/RSVA10eBQw6kt4408gZg+A2+Y694H9i51/+66qQBd3cBVrwHzN/i7dswA9g0yUjsBd5aUD2sRPEoG83wSeiPWEgSZ5Sl1LpY91FOYMvqp9IgCoJkPL0MWnLyCVwS/7Tor7rvUZZv1FiRIIxaGT4H/Q1/FhNJkFeoXuPcTcBb3/ieH9UG6Hq5+hoKiifLC6DtQ8DhnOAwmNUXiI0FJgbxYOlyOXCv7e9yT17lu9aLzgRWjvbO/eUuYNiSwGuxX8cr+j4B/Gh7UNhHuuQs4JnbgEdeBtZ86j3bqwUw7DrneU9JA2JtNVVHcoBtP3pD7vYrW5wH1K/lMJ4RBvaEeum0G1qEJEk6A0g9K/DeK9jDXVCA7KHDHa/WjioIkj5vLmJPa1jBKYO4jE+RrC+AkmM6OUzt4cl7lHpDtf4IsuxtYPHbQUwWZJe4GODjB3VzgsRrfZ/3wuQEoIHlxh7KAfKLvOefGw189h/fpy/787q8Il+i3XoDMML2lO83H/jhN+94nZoB9xt/s8LlBoYsAr7Z7T3/h9OBga2BFz4BvrYcp0/2xhSgbrrelzhffS/Ah0liHNCwtneM4lJgX5b+/26XA5O7AW0eAo4VBAfYB/cBqbZaqgfWAhs/V18/tj0w8BrFed5sFjXSaTdMrbhUIK4WcMr/8Djubwa3vGB7le3bj5zxExQE6XOzo5OecscoJLS8Mtg5Qu9Xkg1kfa0nBU2CeHIeRgKQIwbyt+9bA2z6IvS5VVecVQ9YbwD1731Anye8PSlA0y1P/VFPAdv/4z3/3r3A/NeB9f/wJc2FZwKrPwLmveo9/nAfoO2lem0Z5ygtA/Ye1X+arVYyQDNr7gDgP/uBe2xveC4aBvy5CfDSNmD2Rt8dzbgR6HqFfoxPdAo927UXAje3BnINApB4d63Uz1Gz0kSkqRdMq5cOvDHVtycfGNS6+cXOI1DAN94NnKEoKfH48IYm8YR+kwGPmZUK1P4TEH9ifMeiDz9GwcLFoREk/srmSB1jUfHBgBZKH5pXeT/pJSWeEnbmPQy/43hGPABD3v/O2REPZR3WvnzqXnuRfmTrt77m0sWNgKYWZ3HTDiArT+9bOwXYOgMYsRT44mdf0qQnA3M2Ai9u8x5fMQq4uLHuT7R72P9q35wKDFns6ws1bwIsHKZfRx+Jvom1XX8xMMewqXf8DAxfqp+9+Srgve+A/2YCKQnA6HbAnFf0c7P7AVu+8vWDevwZoKYy2xOv69qQ7Y+NgWdH+c77yufA/WvV+2l1PjB/sPN5n3vOqJaRH/EQJA1Ia6Jn2E9Ay3tsPkr+8ZnjyFqmQoPQDq81d/aJM7OyvzFqrvJ088rUHuY7BAHVh7Efq5ljbjGJ4Pp536C4BCi1RWriY4H4OC9Iy98F/haEw80rTLu/yxxgb6Y+hkka/j76aWDbv71jU9uQOL8eAha/pRPly198b9BV5wMZqbqAWrUPe9Gco2YyW4+5wK+WKBijWFun6/t5bQcww/hzepO6AHM26WbXeacBl50DPP+xPgo10pjlQImhxYghyWmaUIXFQKsZ3jmd/Khhi8vvw7qrxwYCrS8MQsTNZKKpRVL1nEjGH4O4NrQuNK+OTZhkVIqXv1bLvMnZxGLXuMubIW38OGgnwvbL3AYUHgFK8wBPWNeMWoW2QXSeDfx21Pci8wmtGqr/gvJRnQVDgJbnea94aL2vueRvWR2bAVO7Ay0tUSers9x9rjeMayWOOearXwD3rvGdwSQR/Q6rb5IYD/yxkW/fnw8CmXwlwGi1/xcBu+oPAIWcZh+jWGz3dANmvaz/Ti3DyNhHP+j/pzb45EfvGKefAnS+zPv/nw8AvR7z/t8eLWN4uNtcNUr0fV6ZWN6pV15haBFP2DcVSKwL1K1ak9/tdiN37uMo/WKHchV+CcKrkvr2RnLXIMOiocj2wa1ASY5BECNydfy9jkDOh2Wi4UuAHbt8Z2ZEqc0lzqv55RBw4zzfcxkpuj1NLWI2lbnE8x/tBMY+6+07/Dqg7SVAT4sAkTQP9Nb9iiunAbT32fjkpwawtgWvA88aQszjVhKRHHTgQ2mTuwK9DGGyRsdI4oc26CPRwf/we2DXIaBOKvDWdIC5Fj4Y2MywrzkvzVnTX+ExO8YMiT/zrnqV9HGGKqJhPleZLrGZREwEPI56OnDq9aGgELBvwcubUPiC/z9Wq2XeNMB/4ZKmIblPLyR26Vi1mmT/Fov/YRQi0rwKVVvNXAdssNmP/m7GU1uBRW/5gndjc2BKd99jnR7xRngY3Rpiubk//qbb8mab2QdITQDuNBxeHidpRrYBfssEOs/x9u3QFHjQ9rcopr0AvP5Pb58LztDDwAyh7joITAyx7GfBYKDl+fp4/ecDO38DEuKAMe0Bhr7ZpvUAHtmoE5j+1YrbgbWfejXMTS2BiV28a3ruA+Dxzd7/r7wduMjQZEwsUpMfyFYLZaO6ekTPbPydAQgS0d6OZ9yNDHscnfU0oGG7gEIfTAdqjsJNr6Hw+TXqcLQxkJbZOwBBjI5xl12KlAH9qs4n2bdZJ4jH/yBBAuQ8VDtftlW3462t+591AXBq1B7UIta2dIRuj5vNbm8HQn35bcC3e3x9BZKm/aXO2obEsbYBC4DvHBJ5s/sDNF3svtDotsBfjGDC+9/rZpS1MbFHE4nt2vuAnELgnAYAcxCMqLFRu5m+ielPmGTi+ScGASs/0PvS1Pp2N7B2u3cW0wTkEZpmdzwTCCXf8zS5XhpXPkxs9vJEtEwzyyDIaR1Cm8Ohd9m+fchf+TxKd1geSH5GDZognjFiYxHf/HLEX9YMcY0bIaZeHWgpKRVb9L7XdBPL8+UL9D8qSJA3vyofAqWwU+jtzR665fn66cDme3yd+l0HfM2lQDukQ7zkbT3kajaS5k9nAS99Asw2IkU8ZxKHT0maagwVMzRMf8DeXhirR782WELH7LN4GHBFE7334jeBZe94r7Tmco7mAjfM1M9dzZomDSCh2BgKfmCd/jv9iasvAOibsTF7vnwU0H6W/v8JnQCaWJ8ZETq7H2VPcgbCKz0JePo24NxT1T09dg3fXWfAJQmIrwVUgCDu/Hy4DmeidPdulHzxJUq2fw6UWcLpAdYaGkECbTyE87Um3YDYevHebyepKEHoxA5a6Dszn558itrbgi3As+/5Hu3XChhv87Hs9vaQvwCDr1XvjvVd9kgVSUNnmREo86nNEUziWPMT9pGbNASuuwgYdC1w+9PlI0Nbpniz0dNfBDZ/6R3Bmsv56hc9RMzW7yrg0x8BOvR09JmwM0O8zMswPL3OIOIt1wDdr/A63VO66dqE4WE2awAiOx9o9xBQHKTQ0c9bOBRoZtHYTsiaBGG1b2wSyg6X4NjsKkwKBymr2pFewZlYQY4XdLe0oS2QcEFto2qXmXOGXUNwzs2ZmIu4/sHy826bqdvdZqOT3HVO+YgXozeM6Vub3d42E3vsYzqx/P202l7fxBqp4hPyPSMLP+5Z4MOd3tHfngawRMOan7Cv3mryWX0h9qNwf3S/rvH4cBi5DCi0aB+aQ/f10kfcvAOYbjihdNwf26xrKhKwRRPg74a5tWS4niCkKcbGAENBEfCOURt2X0/g/nVee71jU+ABw48iOUnSYJsVS7/XkCGGox6bhOLvjiL3GYuJF+x8leynHek1MCxvFyVd1wQpHc41Xo7iDaaDXsHdXD2jfPb25bsBOoZmU2majRN108Pa7PVI5lOffS6b7O1Ju37NXeUjVcxdrBqj9+s5T48UsVmJ8/1egM4+yzqszi/7sVSkXi3AyReyzrl0K0Azymyn1gaoEanR2MzIEnMeTBLOMELJjKTRrBpjROIYkbJn6q14jPorsNDi55kBCPZh5Ovzn3zxYyjZqYaNQQJqp2CaxwdhEaOeMMzf/BMK37FULgQzRhX0CRtBYhvXRsaYFrqTzuLEimoQguBUjEcnk7kAszF6YybFzGM0m5hNtjd7GcnmyQBNCZonUy1/ms40Z+yRqnaXAA/11ZNure8FWPPEZiWOOSd9l6UW08GqIX7aD/R+3Hd1LBeZN1B961m+YiZJWYbz9a96yHvSKn0PZnvqVuAdVlK7gbPr6xEts3ENDP2adVrMqFtLaEw/ymkVzMe0mVn+reeeLfQ8TNDNokFikpC9YDvKdht1Y0GPUfmO2pGe4dEg1BYZU69BbC3NcNIroUFYQcvSEGuz5gIoNB1mASwwtDY6wb8/rTyKNMVMe9sfxiZB7HkRPiUZaZq82nddzD2MtUVi7l8DvGKpJ6P58+I4fVa7L8Rj1AR3dnJeFQmw5C1gYlfveQYD7liuV9haW9OzAZKEjURhOJlz88MIE6uHHzZyJjxmxdeqUe0reeMrYIqtbuyaC4BHB4SQJDRrVfX318uyXch++IOwfNVA+Ajyv/Kf5A5NkHxto9CiWJ7K1oW+pSJ80pl1UeYNYzGdWVbNWP+/95cXKuYbzNbpMqBPS6CkFLhyesD4uOeyxvWADROANdt8n8AMoTI38KqRoaWpwHLyoX/RfQhru+VJPURsNoZvmR9gs/tCPMakJqNITi0rX3egWRVgNqdiRvMcneXmv3cey3r0wXXAy5Zck+lHOV1p78v1LBnhmwMJPKNBBhIkHgXv7kHB69VvXnGZYSWIVisRtae0hKbx632CDPPyLcG2AQr8grkB9j7MMvdoDuw5AnSzFf+xburcBsC5DfWIEUvH2eqmAW9OKx+pWjYicJSG17/9DXDPam+WncesZt+sDb65h2D2ZU3wsdar73xvCJkO/L6jwOdGuJYJQgYp/CVnt/wTmPai94HhVCpjXZc1qHBmHT1c7JQMDLQXo7LX7YpD1qxtcB+zvFoQ6NoqPK8dufGWsDjp5h5SepyHpBYNjC9lCCKTztILPqWquvFtOj7l+TRfvx04u4Fe/k0Hl9rIFCJGpUwHlE/zJ4cC9kgVi/zM9zFU66RZNn6lryZkToYvLZ1ulIOzBOUbi3YJZs89m+s+B7Xm4IXeBCTXum488PFO37ovfwWEJPDU571rJAbMrvdW1ERZHy6cj6YY354MtVky6YXbDiB/g6XQM9SxKtk/7ATRUuKQMekKxCQzkmRW2FY0nFVJNCp6+ff/BfIs70A0O7t8ZMw+NsvUre9/8DyjUNZyjIquh9cxArbf4tSywpfvq9OENCuO2Y/Vuk5v+FFIv/rVl8DUCNYXruzrW7dd91v4Ytai4foDJ+TmrcVy5buRPeczuPONIEfIY1X+Au1wmDUIt5DQrAHS+5yna5Eaxo3K34KTaASai3zFeU4/4LpKlKYbZSY5q39A8T9tZUHVDJd2uEd4TSxzv6k9myCpOb/FI6wWXzXDf5JNR5OMGqp900puTEPh9oPIWxsex9y6+IghCJN16YMuQMIFGZbv2BV1UklJqzmXW94oLPouC7krdvoGL8K0k8ghCAGIj0Fa//OReKHxxQLCjzCJRZimdQNF/zqK3FU/ln/jM0xL0g53HxRZNk0MkNL1bCS3NCo9hSRhEo1qntYNFHyyH/kbf4mov4cUeQQx7kvCJXWR2v13iEkL718eqmYxicrpXLklyFu/C8VfG9XCEYRCxBKEGGnJsUhu38jjvGv2LyiLIBBlKSEiYHyzorvMhcJPD6Jgyx64C4Islw9xqsp21w51izATy2FHMackIOmqhkhqWg8xGQm2L62uLARyfbUhYBDDlV2Mwi8Po/DD/XBlKb5Dq9oW5X+iGkGQ41vQNMSdk474s9MR1ygVsQ2SPYTR4mL0P17kaeK0hF+2dLfW8x2ApS6QEGUHC1C6Jw8lu3JQ+nNOcLVu4d8ItEPdBkeWkx4BoMgSBIHjj1shiAiDIKBGQDvUVTSICIggoEJACCKyIQj4QUAIIuIhCPgjyMEuQ8RJFxERBBQIaEIQkQ1BwI+TLgQR8RAE/BGks5hYIiCCgDKKdVAIItIhCCgR0A52HipOugiIIKB00jsJQUQ6BAGliXVACCLSIQioTSwhiEiHIOAninWgo5hYIiCCgNrE6jhMnHSRD0FA5aQfEIKIcAgCfnyQDqJBRD4EAbWJJQQR6RAERIOIDAgCFUHg/wFwLgQ/JCCiBAAAAABJRU5ErkJggg=="this.writebgImg(bg)ctx.drawImage(this.canvasImg.bgimgPath, 0, 0, 264, 215);// 绘制商品图ctx.drawImage(this.canvasImg.commodityimgPath, 20, 22, 90, 100); // 商品图// 添加商品名称ctx.setFontSize(18);ctx.setFillStyle('#000000');// this.productDetail.proName// ctx: 画布的上下文环境// content: 需要绘制的文本内容// drawX: 绘制文本的x坐标// drawY: 绘制文本的y坐标// lineHeight:文本之间的行高// lineMaxWidth:每行文本的最大宽度// lineNum:最多绘制的行数// */this.textPrewrap(ctx, this.productDetailbox.proName, 115, 40, 25, 115, 2)// this.textPrewrap(ctx, '测试风收到回复肯德基福克斯等哈开发手打开发机三打哈登记说法凯撒代发', 115, 40, 25, 115, 2) // ctx.fillText('测试风收到回复肯德基福克斯等哈开发手打开发机三打哈登记说法凯撒代发', 200,50, 140);// 添加商品价格// ctx.setFontSize(22);ctx.setFillStyle('#FF0000');// this.productDetail.pricectx.font = 'normal bold 26px Arial,sans-serif 'ctx.fillText('¥' + this.productDetail.price, 115, 120, 200, 70);// 绘制完成并导出图片ctx.draw(false, () => {uni.canvasToTempFilePath({canvasId: 'myCanvas',success: (res) => {console.log(res.tempFilePath); // res.tempFilePath 就是生成的图片路径this.tempFilePath=res.tempFilePath// this.uploadbgImg(res.tempFilePath)// 这里可以将 res.tempFilePath 返回给调用方或者保存到本地},fail: (res) => {console.error(res);}}, this);});}})},

这里的urlTobase64(url) url是你的远程图片路径,通过arrayBufferToBase64他会返回你一个base64数据

//把arraybuffer转成base64
let base64 = wx.arrayBufferToBase64(res.data);

转入成功后我们在把图片渲染到 canvas之前需要把base64写入一下

跟这个一样,你只需要换一下里面的base64数据就行,需要注意的是一个他好像不能循环利用,一个图片你要单独写一个方法进入写入

 写入方法:

	writebgImg(data){const base64 = data; //base64格式图片const time = new Date().getTime();//USER_DATA_PATH:文件系统中的用户目录路径 (本地路径)const imgPath = wx.env.USER_DATA_PATH + "/poster" + time + "" + ".png";const imageData = base64.replace(/^data:image\/\w+;base64,/, "");const file = wx.getFileSystemManager();file.writeFileSync(imgPath, imageData, "base64");this.canvasImg.bgimgPath=imgPathconsole.log('imgPath',this.canvasImg.bgimgPath);//imgPath就是图片在本地的地址//如需保存至本地// wx.saveImageToPhotosAlbum({//       filePath: imgPath,//        success: (res) => {//            wx.showModal({//                title: '照片已保存至相册',//                content: '快去分享给小伙伴吧',//                confirmText: '我知道了',//                showCancel: false,//           })//       }// })},

方法里面什么都不用改,他会正常给你返回一个真机可读取的路径

	// 商品图writecommodityImg(data){const base64 = data; //base64格式图片const time = new Date().getTime();//USER_DATA_PATH:文件系统中的用户目录路径 (本地路径)const imgPath = wx.env.USER_DATA_PATH + "/poster" + time + "" + ".png";const imageData = base64.replace(/^data:image\/\w+;base64,/, "");const file = wx.getFileSystemManager();file.writeFileSync(imgPath, imageData, "base64");this.canvasImg.commodityimgPath=imgPathconsole.log('imgPath',this.canvasImg.commodityimgPath);},

写入完之后你就可以渲染对应的图片数据了,根据你对应的位置和大小进行修改就可以了

	// 绘制商品图ctx.drawImage(图片渲染路径,x轴位置,y轴位置,宽,高)ctx.drawImage(this.canvasImg.commodityimgPath, 20, 22, 90, 100); // 商品图

文字也一样

ctx.fillText('¥' + this.productDetail.price, 115, 120, 200, 70);

但是如果文字是商品名称你又想设置换行可以根据我下面这个方法来

this.textPrewrap(ctx, this.productDetailbox.proName, 115, 40, 25, 115, 2)

 我这个方法是在urlTobase64里渲染的时候用到的,就是你在渲染文字的地址换成这个方法就行

     // this.productDetail.proName
                        // ctx: 画布的上下文环境
                        // content: 需要绘制的文本内容
                        // drawX: 绘制文本的x坐标
                        // drawY: 绘制文本的y坐标
                        // lineHeight:文本之间的行高
                        // lineMaxWidth:每行文本的最大宽度
                        // lineNum:最多绘制的行数

下面是对应方法

	textPrewrap(ctx, content, drawX, drawY, lineHeight, lineMaxWidth, lineNum) {var drawTxt = ''; // 当前绘制的内容var drawLine = 1; // 第几行开始绘制var drawIndex = 0; // 当前绘制内容的索引// 判断内容是否可以一行绘制完毕if (ctx.measureText(content).width <= lineMaxWidth) {ctx.fillText(content.substring(drawIndex, i), drawX, drawY);} else {for (var i = 0; i < content.length; i++) {drawTxt += content[i];if (ctx.measureText(drawTxt).width >= lineMaxWidth) {if (drawLine >= lineNum) {ctx.fillText(content.substring(drawIndex, i) + '..', drawX, drawY);break;} else {ctx.fillText(content.substring(drawIndex, i + 1), drawX, drawY);drawIndex = i + 1;drawLine += 1;drawY += lineHeight;drawTxt = '';}} else {// 内容绘制完毕,但是剩下的内容宽度不到lineMaxWidthif (i === content.length - 1) {ctx.fillText(content.substring(drawIndex), drawX, drawY);}}}}},

 最后绘制并导出就好了

// 绘制完成并导出图片ctx.draw(false, () => {uni.canvasToTempFilePath({canvasId: 'myCanvas',success: (res) => {console.log(res.tempFilePath); // res.tempFilePath 就是生成的图片路径this.tempFilePath=res.tempFilePath// this.uploadbgImg(res.tempFilePath)// 这里可以将 res.tempFilePath 返回给调用方或者保存到本地},fail: (res) => {console.error(res);}}, this);});

在对应分享页面设置图片就OK了 

onShareAppMessage() {// console.log(this.tempFilePath)return {title:'Hi,这个商品不错,分享给你',path: '/pages/index/index',imageUrl: this.tempFilePath, //背景图success: function() {uni.showToast({title: '分享成功',icon: 'success'});},fail: function() {uni.showToast({title: '分享失败',icon: 'none'});}}},

 有问题随时滴滴。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringSecurity中文文档(Servlet Method Security)

Method Security 除了在请求级别进行建模授权之外&#xff0c;Spring Security 还支持在方法级别进行建模。 您可以在应用程序中激活它&#xff0c;方法是使用EnableMethodSecurity 注释任何Configuration 类&#xff0c;或者将 < method-security > 添加到任何 XML 配…

springbootAl农作物病虫害预警系统-计算机毕业设计源码21875

摘要 随着农业现代化的推进&#xff0c;农作物病虫害的防治已成为农业生产中的重要环节。传统的病虫害防治方法往往依赖于农民的经验和观察&#xff0c;难以准确、及时地预测和防控病虫害的发生。因此&#xff0c;开发一种基于现代信息技术的农作物病虫害预警系统&#xff0c;对…

【计算机毕业设计】012基于微信小程序的科创微应用平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

解决vite 断点调试定位不准确问题

问题&#xff1a;vite构建时&#xff0c;控制台报错行数等信息定位不准确或debugger断点调试定位不准确 解决&#xff1a;F12后打开设置面板&#xff0c;把“JavaScript源代码映射”去掉可临时解决&#xff0c;如需永久解决需升级vite到最新版 还有一种&#xff1a; 参考&…

7.9 cf div3

BProblem - B - Codeforces 题目解读&#xff1a; 找到严格大于相邻数字的数&#xff0c;将其减一&#xff0c;直到整个数组成为稳定的&#xff08;不存在数字严格大于相邻数&#xff09; ac代码 #include<bits/stdc.h> typedef long long ll;#define IOS ios::sync_w…

免费白嫖A100活动开始啦,InternLM + LlamaIndex RAG 实践

内容来源&#xff1a;Docs 前置知识&#xff1a; 检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09; LlamaIndex LlamaIndex 是一个上下文增强的 LLM 框架&#xff0c;旨在通过将其与特定上下文数据集集成&#xff0c;增强大型语言模型&a…

决策树算法简单介绍:原理和方案实施

决策树算法介绍&#xff1a;原理和方案实施 决策树&#xff08;Decision Tree&#xff09;是一种常用的机器学习算法&#xff0c;它既可以用于分类任务&#xff0c;也可以用于回归任务。由于其直观性和解释性&#xff0c;决策树在数据分析和模型构建中得到了广泛的应用。本文将…

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

挖K脚本检测指南

免责声明:本文仅做分享... 目录 挖K样本-Win&Linux-危害&定性 Linux-Web 安全漏洞导致挖K事件 Windows-系统口令爆破导致挖K事件 --怎么被挖K了??? 已经取得了权限. 挖K样本-Win&Linux-危害&定性 危害&#xff1a;CPU 拉满&#xff0c;网络阻塞&…

在Linux下使用Docker部署chirpstack

目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack&#xff0c;chirpstack采用的是v4 版本&#xff0c;v4 版本 与…

Logstash常用的filter四大插件

以博客<ELK日志分析系统概述及部署>中实验结果为依据 补充&#xff1a;如何用正则表达式匹配一个ipv4地址 &#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&#xff09;\.&#xff08;[0-9] | [1-9][0-9] | 1[0-9][0-9] | 2[04][0-9] | 25[0-5]&a…

基于Java的数码论坛系统设计与实现

你好&#xff0c;我是计算机领域的研究者。如果你对数码论坛系统开发感兴趣或有相关需求&#xff0c;欢迎联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java技术、MySQL数据库、B/S架构、SpringBoot框架 工具&#xff1a; Eclipse、MySQ…

css 文件重复类样式删除

上传文件 进行无关 className 删除 <div style"display: flex;"><input type"file" change"handleFileUpload" /><el-button click"removeStyles" :disabled"!fileContent">Remove Styles and Download&…

antd a-select下拉框样式修改 vue3 亲测有效

记录一下遇到的问题 1.遇到问题&#xff1a; 使用到Vue3 Ant Design of Vue 3.2.20&#xff0c;但因为项目需求样式&#xff0c;各种查找资料都未能解决; 2.解决问题&#xff1a; ①我们审查元素可以看到&#xff0c;下拉框是在body中的; ①在a-select 元素上添加dropdownCla…

运行时异常与一般异常的异同

运行时异常与一般异常的异同 1、运行时异常&#xff08;Runtime Exception&#xff09;1.1 特点 2、 一般异常&#xff08;Checked Exception&#xff09;2.1 特点 3、异同点总结3.1 相同点3.2 不同点 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

图形学各种二维基础变换,原来线性代数还能这么用,太牛了

缩放变换 均匀缩放 若想将一个图形缩小0.5倍 若x乘上缩放值s等于x撇&#xff0c;y同理&#xff0c;则 x ′ s x y ′ s y \begin{aligned} & x^{\prime}s x \\ & y^{\prime}s y \end{aligned} ​x′sxy′sy​&#xff0c;这样就表示了x缩小了s倍&#xff0c;y也是…

UML中用例之间的可视化表示

用例除了与参与者有关联关系外&#xff0c;用例之间也存在着一定的关系&#xff0c;如泛化关系、包含关系、扩展关系等。 4.2.1 包含关系 包含关系指的是两个用例之间的关系&#xff0c;其中一个用例&#xff08;称为基本用例&#xff0c;Base Use Case&#xff09;的行为包…

温度传感器的常见故障及处理方法

温度传感器作为现代工业、科研及日常生活中不可或缺的重要元件&#xff0c;其稳定性和准确性直接影响到设备的运行效率和安全。然而&#xff0c;由于各种因素的影响&#xff0c;温度传感器在使用过程中常会遇到一些故障。本文将针对这些常见故障进行分析&#xff0c;并提出相应…

如果你想手写Linux系统

哈喽&#xff0c;我是子牙老师。今天咱们聊聊这个话题吧&#xff0c;Linux作为当今科技世界的地基&#xff0c;我们越来越接近真理了&#xff0c;有木有&#xff1f; 这个文章的角度&#xff0c;你可能全网都很难找到第二篇如此系统讲透这个问题的文章 你可能想问&#xff1a…

LabVIEW电滞回线测试系统

铁电材料的性能评估依赖于电滞回线的测量&#xff0c;这直接关系到材料的应用效果和寿命。传统的电滞回线测量方法操作复杂且设备成本高。开发了一种基于LabVIEW的电滞回线测试系统&#xff0c;解决传统方法的不足&#xff0c;降低成本&#xff0c;提高操作便捷性和数据分析的自…