JS通过canvas获取旋转90度后的图片

2024-06-03 23:36

本文主要是介绍JS通过canvas获取旋转90度后的图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

部分代码来自这里,若侵权,请联系我!

个人只使用了其中一种方法,已成功:

环境:H5 、vue3、vant4、js,

使用了vant4中的签名组件( van-signature ),设计要求页面是横屏显示,但是由于canvas在组件内部,暂时没办法通过H5 document.getElementById 获取到canvas元素(组件旋转后,canvas的XY轴也需要修改,但是获取不到元素,就没有办法修改)。所以组件旋转放弃, 考虑签名组件生成图片后,再通过canvas旋转图片

代码如下:


<van-signature ref="sign" @submit="onSubmit" @clear="onClear" confirm-button-text=""/><div class="absolute bottom-20 left--6 rotate-90 origin-center flex items-center"><!--<div class="absolute bottom-5 left-5 flex items-center">--><van-button type="primary" @click="clear" round>擦除</van-button><van-button type="primary" @click="submit" round color="#2e99a4">完成并同意</van-button>
</div>
<canvas id="canvas"></canvas>
onSubmit(data) {
// 这里我使用的是vant4 中的签名组件,签名完成后返回值返回的就是base64格式的图片地址this.image = data.image// 获取到图片后使用canvas获取旋转90度后的图片const imgN = new Image()imgN.src = this.image // base64 imageconst canvas = document.getElementById('canvas')const context = canvas.getContext('2d')const cutCoor = {sx: 0,sy: 0,ex: 0,ey: 0,}imgN.onload = () => {const imgW = imgN.widthconst imgH = imgN.heightconst size = imgH//   常量大小 = imgH;canvas.width = size * 2canvas.height = size * 2cutCoor.sx = sizecutCoor.sy = size - imgWcutCoor.ex = size + imgHcutCoor.ey = size + imgWcontext.translate(size, size)context.rotate((Math.PI / 2) * 3)context.drawImage(imgN, 0, 0)const imgData = context.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey)canvas.width = imgHcanvas.height = imgWcontext.putImageData(imgData, 0, 0)this.image = canvas.toDataURL('image/png')this.show = true}
},
onClear() {},
clear() {this.$refs.sign.clear()
},
submit() {this.$refs.sign.submit()
},

完整代码

<template><div class="page w-screen h-screen bg-red-200"><div class="absolute top-10 right-10" @click="back"><van-icon name="close" size="24"></van-icon></div><van-signature ref="sign" @submit="onSubmit" @clear="onClear" confirm-button-text=""/><div class="absolute bottom-20 left--6 rotate-90 origin-center flex items-center"><!--<div class="absolute bottom-5 left-5 flex items-center">--><img src="@/assets/image/clear-icon.png" class="w-5 h-5 object-cover mr-4 box-border" alt="" @click="clear"><van-button type="primary" @click="submit" round color="#2e99a4">完成并同意</van-button></div><canvas id="canvas" ref="canvas"></canvas></div>
</template><script>
import { useWindowSize } from '@vant/use'
import HNavBar from '@/components/HNavBar.vue'export default {components: { HNavBar },props: {},data() {return {image: '',}},computed: {},watch: {},beforeMount() {},async activated() {},mounted() {},methods: {onSubmit(data) {this.image = data.image// 获取到图片后使用canvas获取旋转90度后的图片const imgN = new Image()imgN.src = this.image // base64 imageconst canvas = document.getElementById('canvas')const context = canvas.getContext('2d')const cutCoor = {sx: 0,sy: 0,ex: 0,ey: 0,}imgN.onload = () => {const imgW = imgN.widthconst imgH = imgN.heightconst size = imgH//   常量大小 = imgH;canvas.width = size * 2canvas.height = size * 2cutCoor.sx = sizecutCoor.sy = size - imgWcutCoor.ex = size + imgHcutCoor.ey = size + imgWcontext.translate(size, size)context.rotate((Math.PI / 2) * 3)context.drawImage(imgN, 0, 0)const imgData = context.getImageData(cutCoor.sx, cutCoor.sy, cutCoor.ex, cutCoor.ey)canvas.width = imgHcanvas.height = imgWcontext.putImageData(imgData, 0, 0)this.image = canvas.toDataURL('image/png')}},onClear() {},back() {this.$router.back()},clear() {this.$refs.sign.clear()},submit() {this.$refs.sign.submit()},},
}
</script><style lang="scss" scoped>
:deep .van-signature {width: 100%;height: 100%;box-sizing: border-box;
}:deep .van-signature__content {width: 100%;height: 100%;
}:deep .van-signature {padding: 0 !important;
}:deep .van-signature__content canvas {width: 100%;height: 100%;
}
</style>

这篇关于JS通过canvas获取旋转90度后的图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028429

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

poj 2187 凸包or旋转qia壳法

题意: 给n(50000)个点,求这些点与点之间距离最大的距离。 解析: 先求凸包然后暴力。 或者旋转卡壳大法。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <s

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of