uniapp截取部分区域

11 篇文章 0 订阅

通过canvas来绘制截取部分,然后保存

html部分
<canvas :style="{ width: canvasW + 'px', height: canvasH + 'px' }"
		canvas-id="myCanvas"></canvas>
<view class="button" @click="save_temp"><text class="cuIcon-down"></text>保存到相册</view>
js部分

data部分:
	canvasW:'',
	canvasH:'',
onload部分:
	this.canvasH = uni.getSystemInfoSync().screenHeight
	this.canvasW = uni.getSystemInfoSync().screenWidth
methods部分:
	// 根据百分百计算px  主要用于结算页面高度
	getPersentageH(p){
		p = p /100
		let h = uni.getSystemInfoSync().screenHeight
		return parseInt(h * p)
	},
	// 画布方法
	draw(){
		/* 创建canvas实例 */
		let ctx = uni.createCanvasContext('myCanvas');
		/* 绘制背景图 */  this.path 根据项目中使用到的图片进行赋值
		ctx.drawImage(this.path,0,0,this.canvasW,this.canvasH);
		/* 设置字体颜色 */
		ctx.setFillStyle('#F76260')
		/* 设置字体大小 和字体family */
		ctx.font=`${uni.upx2px(30)}px Arial`;
		/* 设置字体对齐方式 */
		ctx.setTextAlign('center')
		/* 设置文字内容以及 canvas的位置 */
		ctx.fillText('十五个字十五个字十五个字十五个', this.canvasW/2, this.getPersentageH(61))
		/* 设置头像背景色,用于确定位置 */
		ctx.setFillStyle('#FBBD08')
		/* 在画圆截取图片之前保存当前canvas的所有内容 */
		ctx.save()
		/* 画笔开始 */
		ctx.beginPath()
		/* 画圆方法 坐标,坐标,半径,起始位置,结束位置(画圆固定 2 * Math.PI) */
		ctx.arc(uni.upx2px(377), this.getPersentageH(54), uni.upx2px(61), 0, 2 * Math.PI)
		/* canvas 截取API */
		ctx.clip()
		/* canvas 连接起始位置API */
		ctx.fill()
		/* 插入图片(头像) */
		ctx.drawImage(this.path1, uni.upx2px(315), this.getPersentageH(50.3),uni.upx2px(122),uni.upx2px(122))
		/* 截取图片后只能在截取部分现在,这一步是恢复画布 */
		ctx.restore()
		/* 放置最下方二维码 */
		ctx.drawImage(this.path, uni.upx2px(274), this.getPersentageH(67),uni.upx2px(204),uni.upx2px(204));
		/* 执行canvas的开始画画方法 */
		ctx.draw()
	}
	保存到相册:
	save_temp(){
		uni.canvasToTempFilePath({
			canvasId: 'myCanvas',
			success: res => {
				uni.saveImageToPhotosAlbum({
					filePath: res.tempFilePath,
					complete: msg => console.log(msg)
				})
			},
			fail: err => console.log(err)
		})
	}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
uniapp中,可以使用uni-app的原生API来实现拍照和截取图片的功能。具体步骤如下: 1. 首先,在uniapp项目的manifest.json文件中,添加相机和相册的权限配置。在"permissions"字段中添加以下代码: ```json "permissions": { "camera": { "desc": "用于拍照" }, "album": { "desc": "用于选择照片" } } ``` 2. 在需要使用拍照和截取功能的页面中,引入uni-app的原生API: ```javascript import { chooseImage, previewImage } from '@uni/image'; import { createCameraContext } from '@uni/camera'; ``` 3. 在页面中添加一个按钮,用于触发拍照和截取功能: ```html <template> <view> <button @click="takePhoto">拍照截取</button> </view> </template> ``` 4. 在页面的methods中,编写拍照和截取的逻辑代码: ```javascript methods: { takePhoto() { const cameraContext = createCameraContext(); cameraContext.takePhoto({ success: (res) => { // 拍照成功后的回调函数 const tempImagePath = res.tempImagePath; this.cropImage(tempImagePath); }, fail: (err) => { // 拍照失败后的回调函数 console.log(err); } }); }, cropImage(imagePath) { chooseImage({ count: 1, sourceType: ['album'], success: (res) => { // 选择照片成功后的回调函数 const tempFilePaths = res.tempFilePaths; previewImage({ urls: tempFilePaths, current: 0, success: () => { // 预览照片成功后的回调函数 uni.getImageInfo({ src: tempFilePaths[0], success: (info) => { // 获取照片信息成功后的回调函数 const width = info.width; const height = info.height; const canvasWidth = 200; // 截取后的图片宽度 const canvasHeight = 200; // 截取后的图片高度 const canvas = uni.createCanvasContext('myCanvas'); canvas.drawImage(tempFilePaths[0], 0, 0, width, height, 0, 0, canvasWidth, canvasHeight); canvas.draw(false, () => { uni.canvasToTempFilePath({ canvasId: 'myCanvas', success: (res) => { // 截取图片成功后的回调函数 const croppedImagePath = res.tempFilePath; console.log(croppedImagePath); }, fail: (err) => { // 截取图片失败后的回调函数 console.log(err); } }); }); }, fail: (err) => { // 获取照片信息失败后的回调函数 console.log(err); } }); }, fail: (err) => { // 预览照片失败后的回调函数 console.log(err); } }); }, fail: (err) => { // 选择照片失败后的回调函数 console.log(err); } }); } } ``` 以上代码实现了在uniapp中拍照和截取一部分的功能。点击按钮后,会调用原生API拍照,并将拍摄的照片截取为指定大小的图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值