导出jpg,再绘制图片的时候,先把画布填充上想要的背景色
wx.canvasToTempFilePath生成图片为透明1、图片旋转之后,进行裁剪,把图片画到canvas上之后生成图片 wx.canvasToTempFilePath,返回的图片打开是透明的。若把图片格式改为jpg,在开发工具上为白色实底区块,在真机上为黑色区块。 代码: ``` /** * 把图片绘制到canvas上 * @param [Boolean] isOnload 是否是在刚加载阶段, * @param [String] imageSrc 背景图片的路径 * @param [Number] width 图片在canvas上的宽度 * @param [Number] height 图片在canvas上的高度 * @param [Number] turnNum 图片旋转的次数(1:90度;2:180;0:原位置) */ drawImg: function (isOnload,imageSrc, w , h,turnNum) { const ctx = wx.createCanvasContext('canvasIn', this); let yuandian ,yuandian1, yuandian2, w1,h1; let {imageInfo,testSrc} = this.data; // 旋转原点配置 yuandian = [ [0,0], [imageInfo.height,0], [imageInfo.width,imageInfo.height], [0,imageInfo.width] ]; if (turnNum % 2 == 0) { w1 = imageInfo.width; h1 = imageInfo.height; } else { w1 = imageInfo.height; h1 = imageInfo.width; } this.setData({ turnNum: turnNum, imageInfo: { width: w1, height: h1, } }) ctx.translate(yuandian[turnNum][0], yuandian[turnNum][1]); // 旋转度数 ctx.rotate(turnNum * 90 * Math.PI / 180); ctx.drawImage(imageSrc, 0, 0,w,h); let _this = this; let timer = setTimeout(function(){ ctx.draw(false, wx.canvasToTempFilePath({ x: w / 2, y: h / 2, width: w, height: h, destWidth: w, destHeight: h, canvasId: 'canvasIn', success: function (res) { var tempFilePath = res.tempFilePath; console.log('图片路径---',tempFilePath) // wx.uploadFile()将图片传到服务端 _this.setData({ testSrc: tempFilePath }) }, fail: function (res) { console.log(res); } })); // clearTimeout(timer); },1000); // ctx.draw(); if (isOnload) this.context = ctx; }, ``` 2、大佬们有什么图片旋转、裁剪、涂鸦的插件或者模板么? 各位大佬帮帮忙,谢谢了!
2019-04-11遇到同样的问题,目前的解决方案是在所有的绘制之前,先给画布上填充自己想要的颜色,再进行后续操作。canvasToTempFilePath的时候做个延迟。导出jpg格式
canvas 生成图片后,在image标签展示展示生成的图片在安卓大概率出现黑屏- 当前 Bug 的表现(可附上截图) canvas 生成图片后,在image标签展示展示生成的图片在安卓大概率出现黑屏 图片的获取都成功了,将canvas 组件显示出来发现画的是没有问题的,但是获取的图片展示确实黑色的。获取图片的方法已经延时2s。 - 预期表现 - 复现路径 - 提供一个最简复现 Demo var widthPercent = this.data.getSystemInfo.windowWidth / 375; var that = this let ctx = wx.createCanvasContext('ewmCanvas'); // 画背景图片 let bgimageurl = that.data.sharemsg.picInfo.picUrl canvas.getImageInfo(bgimageurl, function (res) { console.log("图片1",res) // ctx.save() ctx.drawImage(res.path, 0, 0, 345 * widthPercent, 255 * widthPercent) // ctx.restore() // 画头像 let iconimageUrl = that.userInfo.imageUrl canvas.getImageInfo(iconimageUrl, function (res) { console.log("图片2", res) ctx.save() ctx.arc(40 * widthPercent, 40 * widthPercent, 20, 0, Math.PI * 2, false); ctx.clip(); ctx.drawImage(res.path, 20 * widthPercent, 20 * widthPercent, 40 * widthPercent, 40 * widthPercent) ctx.restore() // 设置昵称 ctx.save(); ctx.setFontSize(16 * widthPercent) ctx.setFillStyle('rgb(255, 255, 255)') ctx.fillText(that.userInfo.name, 70 * widthPercent, 46 * widthPercent) ctx.restore() // 设置文字标题 ctx.save(); ctx.setFontSize(28 * widthPercent) ctx.setTextAlign('center') ctx.setFillStyle('rgb(255, 255, 255)') ctx.setShadow(1, 1, 3, 'rgba(0, 0, 0, 0.2)') ctx.fillText(that.data.sharemsg.picInfo.title, 172.5 * widthPercent, 235 * widthPercent) ctx.restore() //设置底部白色背景 ctx.save(); ctx.beginPath() ctx.rect(0, 255 * widthPercent, 345 * widthPercent, 90 * widthPercent) ctx.setFillStyle('#ffffff') ctx.fill() ctx.restore() // 设置二维码 var ewmImageUrl = that.data.sharemsg.picInfo.codeUrl canvas.getImageInfo(ewmImageUrl, function (res) { console.log("图片3", res) // ctx.save() ctx.drawImage(res.path, 10 * widthPercent, 260 * widthPercent, 80 * widthPercent, 80 * widthPercent) // ctx.restore() //设置顶部说明 ctx.save() ctx.font = 'normal bold 18px sans-serif'; ctx.setFontSize(18 * widthPercent) ctx.setFillStyle('rgb(51, 51, 51)') // ctx.setTextAlign('center') ctx.fillText(that.data.sharemsg.picInfo.codeTitle, 98 * widthPercent, 294 * widthPercent) ctx.restore() // 底部说明 ctx.setFontSize(16 * widthPercent) ctx.setFillStyle('rgb(102, 102, 102)') ctx.fillText(that.data.sharemsg.picInfo.codeSubTitle, 98 * widthPercent, 322 * widthPercent) ctx.draw(false,function(){ setTimeout(function(){ canvas.canvasToTempFilePath('jpg', 'ewmCanvas', function (res) { wx.hideToast() var url = res.tempFilePath; if (that.data.shareimageUrl == "set") { that.data.sharemsg.show = true that.setData({ sharemsg: that.data.sharemsg, shareimageUrl: url, }) } else { that.setData({ shareimageUrl: url, }) } }) },2000) }) },function(res){ that.data.shareimageUrl == "" }) }, function (res) { that.data.shareimageUrl == "" }); }, function (res) { that.data.shareimageUrl == "" });
2019-04-11调试基础库:1.9.96 ios系统:12.1 微信版本:7.0.1 下图是代码片段和真机截图 黑糊糊一块的给了opacity:0.1,但是全黑了[图片][图片]
ios12中,设置opacity不生效ios12中,cover-view设置opacity半遮罩,看到的效果却为全遮罩,且不稳定,时行时不行
2019-01-10我也遇到了相同的问题,用js控制从第0个元素到最后一个元素的时候,过度的挺好,会从左往右滑动一张。但是js控制从最后一个元素到第0个元素的时候,会显示从右往左滑动N张后到第0个元素
Swiper通过js控制滑动的时候,像右滑动衔接无效。像左有效Swiper通过js控制current属性滑动的时候,像右滑动衔接(circular)无效,像左有效。不通过js控制,手动操作正常
2018-12-21@官方 来看看这个问题啊
ios11.4.1 input bug 无法获取焦点 之前输入的内容也无法显示- 当前 Bug 的表现(可附上截图) A页面input获取焦点,唤起键盘 [图片] input输入文字 [图片] 不要点击键盘的确认按钮,直接点击input后面的search按钮 [图片] search按钮打开B页面,input中的文字已经消失 [图片] B页面返回A页面,input输入框中的文字不见了,也无法获取焦点 [图片] - 预期表现 input中展示原来输入的内容,并且可以获得焦点 - 复现路径 A页面有个搜索框,输入完内容后直接点击按钮触发打开一个新页面B(输入完成后不点击键盘上的确认按钮,所以键盘是展开在页面上的),从新页面返回后,输入框中的文字和placeholder都不显示,并且无法获取焦点。 - 提供一个最简复现 Demo <input class="search" value="{{searchText}}" placeholder="搜索" bindinput="searchInput"></input> ios11.3 偶尔也会出现这样的问题。 使用 bindconfirm 事件绑定后,ios11.3 系统 点击键盘确认触发bindconfirm 后跳转到B页面,返回到A页面必现这个问题。
2018-09-28