用canvas实现九宫格切图之手把手教学(uniapp+ts)

article/2025/9/28 2:32:20

uniapp用canvas实现九宫格切图(typescript)

    • 前言
    • 上传图片
    • 展示图片
    • 画布
    • 下载图片
    • 最终效果
    • 总结

前言

这几天工作比较轻松,所以就有时间发下呆,突然想起前段时间用了一个九宫格切图软件,所以就自己试着开发下,期间不少问题也是问领导的,领导知道我在摸鱼但也很耐心帮我(受宠若惊),所以在这里谢谢他。

上传图片

在这里插入图片描述

  handleUpload(): void {uni.chooseImage({sizeType: ['original'],success: (chooseImageRes) => {this.url = chooseImageRes.tempFilePaths[0];uni.showToast({title: '上传成功',icon: 'none',duration: 1000,});},});}

调用uniapp的选择图片api选取图片,然后获取本地图片路径。

展示图片

<view v-if="url" class="l-content__img-box"><image class="l-content__img" :src="url"></image>
</view>

上传图片之后,用获取到的本地图片路径在页面上展示出来。

画布

1.在页面中写好九个画布,每个画布必须有canvas-id

<view><view>九宫格</view><view class="l-canvases"><canvasv-for="index in 9":canvas-id="'c' + index":key="index":style="getCanvasStyle(index)"@click="handleDownload(index)"></canvas></view>
</view>

2.每个画布都代表图片的一部分,接下来,我们把图片在canvas里渲染出来.

drawImage(url, dx, dy, dWidth, dHeight)

笔者对drawImage的理解:

dx,dy:切图的位置,比如说(0,0)即为左上角的位置,(-200, -200)为右下角的位置。

dWidth,dHeight:设置整张图片在画布中的大小。此例为(300,300)

代码如下:

/** 图片每个canvas以及图片的大小 */
protected interval = 100;handleShow(): void {const c1 = uni.createCanvasContext('c1');c1.drawImage(this.url, 0, 0, this.interval * 3, this.interval * 3);c1.draw();const c2 = uni.createCanvasContext('c2');c2.drawImage(this.url, -this.interval, 0, this.interval * 3, this.interval * 3);c2.draw();const c3 = uni.createCanvasContext('c3');c3.drawImage(this.url, -this.interval * 2, 0, this.interval * 3, this.interval * 3);c3.draw();const c4 = uni.createCanvasContext('c4');c4.drawImage(this.url, 0, -this.interval, this.interval * 3, this.interval * 3);c4.draw();const c5 = uni.createCanvasContext('c5');c5.drawImage(this.url, -this.interval, -this.interval, this.interval * 3, this.interval * 3);c5.draw();const c6 = uni.createCanvasContext('c6');c6.drawImage(this.url,-this.interval * 2,-this.interval,this.interval * 3,this.interval * 3,);c6.draw();const c7 = uni.createCanvasContext('c7');c7.drawImage(this.url, 0, -this.interval * 2, this.interval * 3, this.interval * 3);c7.draw();const c8 = uni.createCanvasContext('c8');c8.drawImage(this.url,-this.interval,-this.interval * 2,this.interval * 3,this.interval * 3,);c8.draw();const c9 = uni.createCanvasContext('c9');c9.drawImage(this.url,-this.interval * 2,-this.interval * 2,this.interval * 3,this.interval * 3,);c9.draw();}

下载图片

通过点击图片让用户自行下载(┓( ´∀` )┏懒),废话不多说直接上代码:
在这里插入图片描述

handleDownload(index: number): void {uni.canvasToTempFilePath({canvasId: `c${index}`,fileType: 'png',success: (res) => {// 在H5平台下,tempFilePath 为 base64const url = res.tempFilePath;uni.previewImage({urls: [url] || [],current: url || '',});},fail: (res) => {console.log('failRes->', res);},},this,);}

最终效果

样式就没认真去做了,实现功能就行了(懒癌犯了),还请各位见谅。

直接上图:
在这里插入图片描述

总结

以上就是本文的所有内容啦,如有什么问题,请大佬们在评论区指正,蟹蟹大家!咱们将在下篇文章中见~


http://chatgpt.dhexx.cn/article/9vbmanOB.shtml

相关文章

PS把图片切成九宫格

目录 PS把图片切成九宫格第一步&#xff0c;导入图片到PS第二步&#xff0c;设置裁剪第三步&#xff0c;导出第四步&#xff0c;效果图 PS把图片切成九宫格 PS把图片切成九宫格,把图片设置切片&#xff0c;不仅可以切成九宫格&#xff0c;也可以设置22&#xff0c;44&#xff0…

九宫格图片怎么操作?这里有你想要的方法

不知道平时小伙伴们在发朋友圈的时候有没有注意过很多人的朋友圈都会将很多图片拼起来&#xff0c;凑成九宫格图片来发送。这是因为朋友圈的限制&#xff0c;无法一次发完&#xff0c;每次最大上传只有9长照片。所以就有很多朋友一次拼齐9个图片在一起实现发布更多的图片&#…

html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图

在微博时尚流行的图片展示上&#xff0c;九宫切图是当下最流行的一种&#xff0c;一张非常普通的照片经过了九宫切图软件的处理&#xff0c;变成非常漂亮的九宫图片&#xff0c;是不是美观大大提升了。尤其是在把自己自拍的照片做成九宫图展示&#xff0c;让人更有一种不一样的…

九宫格拼图怎么拼?分享两个简单的操作

日常生活中发朋友圈的时候&#xff0c;小伙伴是不是有很多照片想分享到朋友圈呢&#xff1f;但是因为朋友圈的限制&#xff0c;不能一次全发。有很多朋友发现很多朋友可以把一张图片剪成9格&#xff01;看起来很棒&#xff0c;那九宫格拼图怎么拼的呢&#xff1f;今天就和大家分…

unity的九宫格切割

我们新建Button&#xff0c;然后我们需要一张图片 修改图片类型如下&#xff1a; Editor GUI and Lagacy GUI适用于ngui&#xff0c;而Sprite适用于ngui 然后点击Sprite Editor&#xff0c;如果首次操作会报错&#xff0c;请按如下操作&#xff1a; 点击Package Manager-》将…

怎么制作九宫格切图?这两个方法非常简单

怎么制作出九宫格切图呢&#xff1f;相信大家在微信朋友圈看到过朋友发的九宫格切图照片&#xff0c;把一张照片切割成九份&#xff0c;然后按照一定的顺序发到朋友圈中&#xff0c;就会形成一个效果非常好的九宫格照片&#xff0c;我们自己也想发这种形式的朋友圈&#xff0c;…

matting之trimap生成_膨胀腐蚀

在抠图技术中三分图&#xff08;trimap)经常被用到&#xff0c;通常使用的方法是膨胀腐蚀(一般在去除噪声的时候先腐蚀再膨胀)。 1. import os import numpy as np import cv2def random_dilate(alpha, low1, high5, modeconstant):"""Dilation. erode"&…

抠图算法-Alpha Matting

目录 概述graph cutAlpha Matting 概述 对于抠图&#xff0c;比较简单的方法是图像分割&#xff0c;这是很老的方法&#xff0c;但这其实算不上真正意义的抠图&#xff0c;因为他的主要目的是用于图像之间块与块的分割。典型的就是grabcut算法&#xff0c;opencv上面有相应的优…

Background Matting V2 学习

论文&#xff1a; [2012.07810] Real-Time High-Resolution Background Matting (arxiv.org) GitHub项目源码&#xff1a;GitHub - PeterL1n/BackgroundMattingV2: Real-Time High-Resolution Background Matting 目录 论文学习 方法设计&#xff1a; 网络模型&#xff1a; 训…

matting系列论文笔记(三):Boosting Semantic Human Matting with Coarse Annotations

matting系列论文笔记&#xff08;三&#xff09;&#xff1a;Boosting Semantic Human Matting with Coarse Annotations 论文链接: CVPR2020 Boosting Semantic Human Matting with Coarse Annotations [1] 代码&#xff1a;暂无 文章目录 matting系列论文笔记&#xff08;三…

Image Matting 图像抠图技术与深度学习抠图

Image Matting: 图像抠图技术是指从静态图像或者视频序列中抽取感兴趣目标的过程&#xff0c;在ps和视频编辑中有重要的应用。 1.Image Matting Matting 技术可以表示为下面的图&#xff0c;与语义分割不同&#xff0c;它可以针对感兴趣前景物体进行细节处理、包括细微的毛发和…

论文阅读——Deep Image Matting

一、摘要 强调image matting&#xff08;抠图&#xff09;的现实意义。已有的算法在前景和背景颜色相似或者拥有复杂的纹理时表现较差&#xff0c;主要原因有两个&#xff0c;一个是只运用到低维特征&#xff0c;另一个是缺少高维语境。所以这篇论文提出了深度模型算法可以解决…

【CVPR2022】Boosting Robustness of Image Matting with Context Assembling and Strong Data Augmentation

Boosting Robustness of Image Matting with Context Assembling and Strong Data Augmentation 中文题目 利用上下文组合和强数据增强的增强鲁棒图像抠图 paper&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/Dai_Boosting_Robustness_of_Image_Mattin…

图像抠图Image Matting算法调研

目录 1.Trimap和Strokes 2. 相关数据集 3.论文算法调研 3.1 Deep Image Matting 3.2 Semantic Image Matting 3.3 Background Matting 3.4 Background Matting V2 3.5 Semantic Human Matting 3.6 HAttMatting 3.7 MMNet&#xff1a;Towards Real-Time Automatic Por…

抠图技术及方法简介(Image Matting Overview)

之前接触过语义分割&#xff0c;所以在刚接触图像抠图时以为两者是差不多。语义分割是端到端的&#xff0c;对像素按照语义进行多分类&#xff0c;而抠图就是按照前景和背景进行二分类嘛&#xff1f;实际上这是错误的理解。语义分割重在对每个像素的语义理解&#xff0c;将相同…

Portrait Matting

文章作者为 Google Research 的软件工程师 Sergio Orts Escolano 和 Jana Ehman&#xff0c;文章发表于 2022 年 1 月 24 日。 Portrait Matting 网络 抠图是提取精确的 alpha 遮罩的过程&#xff0c;抠图假设图像是前景和背景图像的合成&#xff0c;因此每个像素的强度是前景…

Background Matting详解

转自&#xff1a;https://zhuanlan.zhihu.com/p/148265115?from_voters_pagetruehttps://www.aiuai.cn/aifarm1462.html 使用人工智能技术实现类似PhotoShop等工具的抠图功能是一个非常有趣且有科研前景的一个方向。和分割算法只有 和 两个值相比&#xff0c;抠图得到的边缘…

【Matting】MODNet:实时人像抠图模型-onnx python部署

上一篇博客【Matting】MODNet&#xff1a;实时人像抠图模型-笔记分析了MODNet的原理&#xff0c;本篇博客将使用python部署MODNet官方提供的onnx模型&#xff0c;其效果如下&#xff1a; 在线人像抠图体验&#xff1a;CV案例 相关部署链接&#xff1a; 【Matting】MODNet&…

【笔记】Robust High-Resolution Video Matting with Temporal Guidance

Robust High-Resolution Video Matting with Temporal Guidance算法笔记 一、算法简介二、网络结构三、训练1、数据集2、训练过程3、损失函数 Robust High-Resolution Video Matting with Temporal Guidance 论文地址 RobustVideoMatting 代码地址 Robust High-Resolution Vide…

【Matting】MODNet:实时人像抠图模型-笔记

paper&#xff1a;MODNet: Real-Time Trimap-Free Portrait Matting via Objective Decomposition (AAAI 2022) github&#xff1a;https://github.com/ZHKKKe/MODNet 抠图在线体验&#xff1a;CV案例 部署教程&#xff1a; 【Matting】MODNet&#xff1a;实时人像抠图模型…