大多数图片都大小不一,选择框的尺寸也是宽高相等的,就会有图片被压缩

解决方法:

1.可以使用画布对图片先进行截取,保存截取图片(用户自己选取,或者指定图片中心区域截取),但是对于多张图片手动截取,会影响体验

2.保证图片完整性,使用image组件的mode属性,可以设置图片裁剪、缩放的模式,点击图片查看之后才会看到整张图片,默认为scaleToFill,但就像上面说的一样,图片会被压缩,但我们只需要显示图片的中心区域,使用aspectFill,图片就会取到中心位置 

 官方是这样描述的:

 我用的是第二种方法,项目图片中设置这样一个属性就可以了,但是要在画布上显示图片中心位置,就要对图片进行截取了

 查了一下,正好官方也给出了drawImage的介绍,正好有几个图片截取的属性值 

 有三个版本的写法:

  • drawImage(dx, dy)
  • drawImage(dx, dy, dWidth, dHeight)
  • drawImage(sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 从 1.9.0 起支持 

 sx : 源图像的矩形选择框的左上角 x 坐标

 sy : 源图像的矩形选择框的左上角 y 坐标

sWidth : 源图像的矩形选择框的宽度

sHeight : 源图像的矩形选择框的高度

 第一种情况(画布的宽度大于高度)

  横图(上面是画布截取的,下面是图片属性mode=aspectFill生成的)       竖图   

                             

 第二种情况(画布的宽度小于高度)

  横图                                    竖图

                                      

  

 第三种情况(宽高相等)

  横图                                    竖图

                                

  以上就是对图片属性值aspectFill的实现

  

<view class='center colu'>
<canvas style='width:{{canvas_width}}px;height:{{canvas_height}}px' canvas-id='my_canvas'></canvas>
<image mode='aspectFill' style='width:{{canvas_width}}px;height:{{canvas_height}}px;margin-top:10px' src='{{img}}'></image>
</view>
Page({

  /**
* 页面的初始数据
*/
data: {
canvas_width: 200,
canvas_height: 300,
img: '../../images/zly.JPG'
},
onLoad() {
this.canvas();
},
canvas() {
var ctx = wx.createCanvasContext('my_canvas', this)
var canvas_width = this.data.canvas_width,
canvas_height = this.data.canvas_height;
var img = this.data.img;
wx.getImageInfo({
src: img,
success(res) {
console.log(res.width, res.height); var img_width = res.width,
img_height = res.height; var clip_left, clip_top, //左偏移值,上偏移值,
clip_width, clip_height; //截取宽度,截取高度 clip_height = img_width * (canvas_height / canvas_width);
if (clip_height > img_height) {
clip_height = img_height;
clip_width = clip_height * (canvas_width / canvas_height);
clip_left = (img_width - clip_width) / 2;
clip_top = 0;
} else {
clip_left = 0;
clip_top = (img_height - clip_height) / 2;
clip_width = img_width
} var data = {
clip_left,
clip_top,
clip_width,
clip_height
} ctx.drawImage(img, clip_left, clip_top, clip_width, clip_height, 0, 0, canvas_width, canvas_height);
ctx.draw();
}
})
}
})

           

       

     

                

              

微信小程序 画布drawImage实现图片截取的更多相关文章

  1. 微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签

    微信小程序:本地资源图片无法通过 WXSS 获取,可以使用网络图片或者 base64或者使用image标签 一.问题 报错信息: VM696:2 pages/user/user.wxss 中的本地资源 ...

  2. 微信小程序-显示外链图片 bug

    微信小程序-显示外链图片 bug 显示外链图片 bug 403 bug 禁止外链,未授权 https://httpstatuses.com/403 image component 图片.支持 JPG. ...

  3. (干货)微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

  4. 微信小程序开发之多图片上传+服务端接收

    前言: 业务需求,这次需要做一个小程序同时选中三张图片一起上传到服务端,后端使用的.NET WEBAPI接收数据保存. 使用技术: 在这章中将会使用到微信小程序wx.uploadFile(Object ...

  5. 微信小程序--地图上添加图片

    如何在微信小程序地图添加上,添加图片? 在微信小程序中,地图的层级最高,所以我们没有办法,通过定位,在地图上添加图片等信息; 处理办法: 添加控件:controls; 其中有个属性position,进 ...

  6. 转:【微信小程序】 微信小程序-拍照或选择图片并上传文件

    调用拍照API:https://mp.weixin.qq.com/debug/wxadoc/dev/api/media-picture.html?t=20161222#wxchooseimageobj ...

  7. 微信小程序使用canvas绘制图片的注意事项

    1.单位换算问题,canvas的尺寸单位是px,所以单位需要做个换算,可以通过wx.getSystemInfo获取屏幕宽高(单位是px),微信小程序无论什么机型,屏幕宽度都是750rpx,因此可以做个 ...

  8. 微信小程序 客服自动回复图片

    产品需求是,在客服对话框里,发送特定的文字,回复我们的二维码: 小城程开发完成后,这个自动回复图片的功能就摆在了眼前.刚开始我们想到的是:在线客服功能的设置里设置好自动回复的图片,但是目前设置不支持自 ...

  9. 微信小程序之上传图片和图片预览

    这几天一直负责做微信小程序这一块,也可以说是边做边学习吧,把自己做的微信小程序的一些功能分享出来,与大家探讨一下,相互学习相互进步. 先看下效果图 只写了一下效果样式的话希望大家不要太在意,下面马路杀 ...

随机推荐

  1. 让小乌龟可以唱歌——对Python turtle进行拓展

    在Scratch中,小猫是可以唱歌的,而且Scratch的声音木块有着丰富的功能,在这方面Python turtle略有欠缺,今天我们就来完善一下. Python声音模块 Python处理声音的模块很 ...

  2. vue试题

    1.v-for可是实现数据遍历显示,不仅可以遍历数组,也可以遍历对象,还可以从数值中取值. 2.vue的生命周期钩子 1)实例,组件通过new Vue()创建出来之后会初始化事件和生命周期,然后就会执 ...

  3. 遗传算法(GA)

    来自:https://blog.csdn.net/u010451580/article/details/51178225 遗传算法是模仿生物进化机制的随机全局搜索和优化方法.借鉴达尔文进化论和孟德尔的 ...

  4. YARN的三种调度器的使用

    YRAN提供了三种调度策略 一.FIFO-先进先出调度器 YRAN默认情况下使用的是该调度器,即所有的应用程序都是按照提交的顺序来执行的,这些应用程序都放在一个队列中,只有在前面的一个任务执行完成之后 ...

  5. EF中关于日期字值的处理

    一.SQL语句方式 var datefrom = DateTime.Parse(fromdate);   var dateto = DateTime.Parse(todate); var sql = ...

  6. react 的基础

    首先下载React 的安装包,可以到官网下载.也可以使用React Demos 已经自带 React 源码,不用另外安装,只需把这个库拷贝到硬盘中使用. (可参考http://www.ruanyife ...

  7. 【转】C# 中Linq查询所有上级节点或所有下级节点

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net ...

  8. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  9. VS2015在win10上编译的程序在Win7上运行的方法

    在win10系统上使用vs2015编译了一个32位的应用程序.在win7上报错无法启动. 下面的win7系统上是可以运行的 无法运行的win7系统: 报错: 1.应用程序无法正常启动(0xc00000 ...

  10. 如何将baseUrl项目地址提取放到放到static

    原本项目的baseUrl地址是放在src/common/config.js ,但是这有一个缺点,就是本地测试一个地址,生产一个地址.每发一次不同環境的包就要build一下,太麻烦了!有没有解决的办法呢 ...