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

相关文章

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整