本帖最后由 推广员的生活 于 2017-2-27 15:39 编辑
微信小程序似乎有些“失宠”,未发布前万众期待,发布后热度却很快就降了下来,究其原因,或许是其功能仍然不够强大,还无法彻底取代应用。不过,还是有一些比较有趣的小程序的,例如微软就开发了一款小程序,名叫微软小蜜,可以将图片一键转换成PPT。
如何操作呢?在微信小程序搜索微软小蜜,打开「微软小蜜」,点击「选取图片」按钮,选择拍照,或从手机相册选取喜欢的图片。上传之后,它就会利用AI深度学习自动识别图片中的文字,帮你生成PPT文件。
微软小蜜的文字识别能力虽然非常强,即使上传图片的背景、颜色很复杂,也能达到极高的正确度。但也有失手的时候,因此在识别结束后,微软小蜜还会让你检查识别结果,修改机器识别出错的地方。确认保存后,点击底部的「分享与发送」按钮,就可以通过二维码、邮件附件这两种方式分享作品了。值得一提的是,微软小蜜还处于预览版阶段,经常会出现识别错误的情况。
微信小程序图片自适应,是一个比较常见的需求,平时我们在WEBView中,只需要设置max-width:100%.在微信里面虽然widthFix也能实现,但有一个缺陷就是图片的宽度值要大于或者等于设定的值,否则就会发生拉伸变形,本文通过另外一种来适应。
首先我们来看看图片组件给的一些说明:
注:image组件默认宽度300px、高度225px
mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。
如果说要有一种比较合适的方案,大概是widthFix,然而上面这些模式中,所要求的前提是需要给图片标签设定一个宽度值或者一个高度值。但有时候我们根本不想限定图片的宽高,我们需要的是图片自身能够根据自身的大小来适配。
而widthFix模式就要求你必须先设定一个宽度值,如果出来的图片比给定的width小呢?此时图片则会发生拉伸的现象。(常见应用在文章中,因为文章中的插图有可能比默认的宽小,比如常见的表情)。
其实上面的标签中,图片为我们预留了一个函数bindLoad。下面看看我是怎么支持自适应的。
有一个前提,就是多图的时候,你需要知道这个图片是处于所有中的位置index,我们通过这个位置来保存图片的宽度和高度。
<font color="#ff00ff"><image src=""bindLoad="imageLoad"style="width:{{imageSize[0].width}}rpx; height:{{imageSize[0].height}}rpx"data-index="0"mode="scaleToFill"/><image src=""bindLoad="imageLoad"style="width:{{imageSize[1].width}}rpx; height:{{imageSize[1].height}}rpx"data-index="1"mode="scaleToFill"/>
var px2rpx = 2, windowWidth=375;page({ data:{ imageSize:{} }, :function(options){ wx.getSystemInfo({ success: function(res) { windowWidth = res.windowWidth; px2rpx = 750/ windowWidth; } }) }, imageLoad:function(e){ //单位rpx var originWidth = e.detail.width*px2rpx, originHeight = e.detail.height*px2rpx, ratio = originWidth/originHeight; var viewWidth =710,viewHeight//设定一个初始宽度 //当它的宽度大于初始宽度时,实际效果跟mode=widthFix一致if(originWidth>= viewWidth){ //宽度等于viewWidth,只需要求出高度就能实现自适应 viewHeight = viewWidth/ratio; }else{ //如果宽度小于初始值,这时就不要缩放了 viewWidth = originWidth; viewHeight = originHeight; } var imageSize = this.data.imageSize; imageSize[e.target.dataset.index] = { width:viewWidth, height:viewHeight } this.setData({ imageSize:imageSize }) }})
如果我们的图片中不仅限定了宽度,还限定了高度值,比如我们限定max-height之类的。那我们的imageLoad函数则要调整为根据他们的宽高比来输出。
imageLoad:function(e){ var originWidth = e.detail.width * px2rpx, originHeight=e.detail.height *px2rpx, ratio = originWidth/originHeight ; var viewWidth =220,viewHeight = 165, viewRatio = viewWidth/viewHeight; if(ratio>=viewRatio){if(originWidth>=viewWidth){ viewHeight = viewWidth/ratio; }else{ viewWidth = originWidth; viewHeight = originHeight } }else{ if(originWidth>=viewWidth){ viewWidth = viewRatio*originHeight }else{ viewWidth = viewRatio*originWidth; viewHeight = viewRatio*originHeight; } } var image = this.data.imageSize; image[e.target.dataset.index]={ width:viewWidth, height:viewHeight } this.setData({ imageSize:image})},
用预览图片的API,wx.previewImage(OBJECT)以下是对应的代码,样式部分,自行布局。
HTML代码:
<view class="wrap"> <image wx:for="{{pictures}}" wx:key="unique" src="{{item}}" data-index="{{index}}" bindtap="previewImage"></image></view>
JS
Page({ data: { pictures: ['https://p0.meituan.net/movie/ea4ac75173a8273f3956e514a4c78018253143.jpeg','https://p0.meituan.net/movie/5d4fa35c6d1215b5689257307c461dd2541448.jpeg','https://p0.meituan.net/movie/0c49f98a93881b65b58c349eed219dba290900.jpg','https://p1.meituan.net/movie/45f98822bd15082ae3932b6108b17a01265779.jpg','https://p1.meituan.net/movie/722de9a7b0c1f9c262162d87eccaec7c451290.jpg','https://p0.meituan.net/movie/cb9be5bbedb78ce2ef8e83c93f83caca474393.jpg','https://p1.meituan.net/movie/a852b992cdec15319c717ba9fa9b7a35406466.jpg','https://p1.meituan.net/movie/dc1f94811793e9c653170cba7b05bf3e484939.jpg'] }, previewImage: function(e){ var that = this, index = e.currentTarget.dataset.index, pictures = this.data.pictures; wx.previewImage({ current: pictures[index], urls: pictures }) }})
先分享这些
</font> 复制代码
产品推广软件楼主热帖