业务需求很常规,把用户的图片(多张,类似发朋友圈)传到服务端保存起来,同时再想办法得到每张图片的缩略图,以便在列表上显示缩略图,点开显示高清原图。首先尝试了小程序的接口wx.compressImage,因为不支持改变图片分辨率(长宽像素),仅改变质量,这样的压缩效果不理想,比如一个2M的图片,压缩完可能还有800K。
另外两个思路都还不成熟,有没有大佬指点下?
一个思路是仍然在小程序端做,用canvas把原图放进来,再导出一个改变了分辨率的压缩图片,这个方案有个体验问题,因为canvas不能隐藏起来执行,会导致整个压缩过程让用户看到,看起来很诡异,不知道是否存在巧妙的手段规避?
另一个思路是放服务端做,因为我用的是官方的云开发环境,可否推荐一下靠谱的图片压缩nodejs模块?是否还存在其他问题要考虑,比如这里又需要云函数把图片从云存储中下载过来,压缩好之后再传一个压缩图回到云存储,这里的流量损耗和时间损耗看起来都不小。
还有没有其他办法?
BTW:其实官方如果能支持是最好的了,无论是尽快完善wx.compressImage,还是云存储支持存一个图片时自动生成几个不同规格质量的压缩图片供调取,有人可以把需求转给官方吗?
一个思路是仍然在小程序端做,用canvas把原图放进来,再导出一个改变了分辨率的压缩图片,这个方案有个体验问题,因为canvas不能隐藏起来执行,会导致整个压缩过程让用户看到,看起来很诡异,不知道是否存在巧妙的手段规避? 这个设置top为-99999就好了
另外,可以使用成熟的oss方案,比如阿里oss,可以直接提供指定分辨率的缩略图功能。你用compressImage压缩图片后上传到oss,要使用缩略图时,获取缩略图链接url显示就好了。预览时获取原图就好了。
canvas 绘制,设置透明度与禁用操作
canvas方案就很好了
可以用数据万象压缩