以下 iOS 型号可复现: 手机型号: iPhoneXs Max, iOS版本 15.4.1, 微信版本: 8.0.27 手机型号: iPhone6, iOS版本 12.5.6, 微信版本: 8.0.29 手机型号: iPhone11, iOS版本 13.3, 微信版本: 8.0.25
canvas drawImage 在 ios 端调用异常android: 使用一张小图,能够正常拼出一张大图,每个小图之间的缝正常展示,宽度均匀 [图片] ios:小图能够拼出大图,但每个小图间的缝异常,宽度不均匀,有些位置有缝,有些位置没有缝 [图片]
2022-10-14由于开发者工具有 BUG,只好手工粘贴代码在这里 注:经测试,貌似些 BUG 只会在开发者工具出现,手机端好像不会出现 js 文件 // js Page({ data: { canvas_info: { width: 2382, height: 2406, cols: 6, rows: 3, uWidth: 397, uHeight: 802 }, img: { url: "https://chiz.img.jwwvip.com/images/6252dbea397e68b740d1e21f.jpg?x-oss-process=image/resize,m_mfit,l_800,s_395", height: 800, width: 395, } }, onLoad() { const that = this; wx.createSelectorQuery().select('#scheme') .fields({ node: true }) .exec(res => { const canvas = res[0].node; const canvas_info = that.data.canvas_info; const img = that.data.img; that.draw_image(canvas, canvas_info, img.width, img.height); }); }, draw_image(canvas, canvas_info, sWidth, sHeight) { const that = this; const ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); canvas.width = canvas_info.width; canvas.height = canvas_info.height; const img_opts = that.get_img_opts(canvas_info, sWidth, sHeight); let success_cnt = 0; wx.showLoading({ title: '正在生成中', mask: true, }); img_opts.forEach(opt => { const img = canvas.createImage(); img.onload = () => { ctx.drawImage( img, opt.sx, opt.sy, opt.sWidth, opt.sHeight, opt.dx, opt.dy, opt.dWidth, opt.dHeight, ); success_cnt += 1; if (success_cnt === img_opts.length) { wx.canvasToTempFilePath({ canvas: canvas, quality: 0.8, fileType: "jpg", success: res => { console.log(res.tempFilePath); that.setData({ path: res.tempFilePath }); wx.hideLoading(); } }); } }; img.src = opt.url; }); }, get_img_opts: function (canvas_info, sWidth, sHeight) { const that = this; const result = []; for (let i = 0; i < canvas_info.rows; i++) { for (let j = 0; j < canvas_info.cols; j++) { result.push({ url: that.data.img.url, sx: 0, sy: 0, sWidth: sWidth, sHeight: sHeight, dx: canvas_info.uWidth * j, dy: canvas_info.uHeight * i, dWidth: sWidth, dHeight: sHeight, }); } } return result; }, preview () { const that = this; wx.previewImage({ urls: [that.data.path], }); }, save() { const that = this; wx.saveImageToPhotosAlbum({ filePath: that.data.path, }); } }); wxml 文件 <view class="img_box" style="height:432rpx;"> <canvas bindtap="preview" id="scheme" type="2d" style="width:400rpx; height:400rpx"></canvas> </view> <button type="primary" bindtap="save">保存</button> wxss 文件 .img_box { width: 100%; display: flex; justify-content: center; align-items: center; border-bottom: 1px solid rgba(128, 128, 128, 0.2); }
wx.canvasToTempFilePath保存图片格式错?fileType:'jpg',选择这个格式,发现保存的临时文件的后缀的确变成了jpg,但是奇怪的是文件格式还是png格式的,这个是用微信开发者工具测试的结果,请问官方如何解决
2022-08-08或许暂时也可以使用 canvas 来曲线救国,不过貌似这个曲线代价也不小
如何解决 wx.chooseImage 返回的原图路径在 <image> 中渲染卡顿?需求:需要上传原图,因此 chooseImage 的 sizeType 需要强制为 original; 问题:上传原图需要时间(尤其是多张原图,且网速不快的时候);在上传的过程中,界面上需要先显示一张缩略图,让用户知悉已经从相册选择图片成功,并正在上传中。此时如果直接将原图的地址,传给 <image> 进行渲染,将导致页面加载原图进行渲染显示,页面在图片加载完成之前,会出现明显的卡顿。 注:有尝试使用 compressImage,但是它是在不改变分辩率的情况下,对图片进行压缩,压缩效果不理想,一张 6M 的图片,quality 设置为 4,出来的尺寸仍然有 600K,而且图片内容已经有明显误差了 不知有没有什么好的办法,以及未来是否可以考虑:wxchooseImage 增加一个开关,如果开启的话,返回原图路径 + 缩略图路径,这样前者可以用来上传,后者可以用来展示,两不误
2021-05-12需求:需要上传原图,因此 chooseImage 的 sizeType 需要强制为 original 问题:但是上传原图需要时间(尤其是多张原图的时候);在上传的过程中,界面上需要显示一张缩略图,让用户知悉已经从相册中选择图片成功,并正在上传中。此时如果直接将原图的地址,传给 <image> 进行渲染,将导致页面加载原图进行渲染显示,加载完成之前,会出现明显的卡顿。 或许可以考虑在 chooseImage 中增加一个开关属性,如果开启的话,同时返回原图路径 + 缩略图路径,这样前者可以用来上传,后者可以用来展示,两不误 注:有尝试使用 compressImage,但是它是在不改变分辩率的情况下进行压缩,压缩效果并不理想,一张 6M 的图片,quality 设置为 4,出来的尺寸仍然有 600K,而且图片内容已经有明显误差了
image图片可以显示成缩略图吗?需求:洗完image组件可以有把大图片显示为缩略图片的功能,不要原图加载显示,因为这样多图片时候,特别费资源,渲染也比较慢,也比较耗费用户流量。
2021-05-12刚试了一下,确实可以,这个 hack 技巧很不错,赞一个
wxs处理页面初始化数据报错wxml 文件 [代码]<[代码][代码]wxs[代码] [代码]src[代码][代码]=[代码][代码]"../../tools.wxs"[代码] [代码]module[代码][代码]=[代码][代码]"tools"[代码] [代码]/>[代码][代码]<[代码][代码]view[代码][代码]>{{tools.hidePhone(obj.phoneNum)}}[代码]view[代码][代码]>[代码][代码] js 文件 [代码]Page({[代码][代码] [代码] [代码] onLoad: [代码][代码]function[代码][代码]() {[代码] [代码] [代码][代码]this[代码][代码].setData({[代码][代码] [代码][代码]obj: {[代码][代码]phoneNum: [代码][代码]'13812345678'[代码]}[代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码]});[代码] wxs 文件 [代码]function[代码] [代码]hidePhone(phoneNum) {[代码][代码] [代码][代码]var[代码] [代码]phone = phoneNum.toString();[代码][代码] [代码][代码]return[代码] [代码]phone.slice(0, 3) + [代码][代码]'****'[代码] [代码]+ phone.slice(7);[代码][代码]}[代码][代码]module.exports = {[代码][代码] [代码][代码]hidePhone: hidePhone[代码][代码]}[代码] 初始化页面时,出现以下报错,有时候页面数据仍然正常显示,有时候则不能 [图片]
2018-07-30目测是因为 wxs 文件没有正确编译和上传的结果,再重新编译上传,有一定的机率修复这个问题 上传后,扫描下体验版的二维码,测试一下是否正常
引入wxs在体验版上无效wxml引入wxs文件,wxs文件里面写的数据处理在体验版上没用,只能在wxml页面写标签里面。 开发工具上wxml引入wxs文件可用。 之前上传的正式版,也是wxml引入wxs,现在打开也是正常的。 现在问题是,wxml引入wxs文件,wxs文件里面写的数据处理在体验版上没用。正式版和开发板没测试过。 求专人解答。 PS:文字叙述能力不太好,有看不懂的可留言。 wxs文件截图 [图片] wxml使用截图 [图片]
2018-05-16