网页前端/node端实现图片旋转功能

news/2024/11/18 16:37:00/文章来源:https://www.cnblogs.com/senjer/p/18552946

网页前端方式

// 图片旋转
rotateImg(url, degree) {return new Promise((resolve, reject) => {const suffix = url.match(/[^\.]+$/)[0]const name = url.replace(/(.*\/)*([^.]+).*/ig, '$2').replace(/-\S+/, '')const fileName = `${name}.${suffix}`const img = new Image()img.src = url // 网络路径// img.src = await this.getFileData(file) // 本地上传File对象img.onload = () => {let cvs = document.createElement('canvas')cvs.width = img.heightcvs.height = img.widthlet ctx = cvs.getContext('2d')if (degree == 90) {ctx.rotate(Math.PI / 180 * 90)ctx.drawImage(img, 0, 0, img.width, img.height, 0, -img.height, img.width, img.height)} else if (degree == -90) {ctx.rotate(Math.PI / 180 * -90)ctx.drawImage(img, 0, 0, img.width, img.height, -img.width, 0, img.width, img.height)} else {}const imgBase64 = cvs.toDataURL()const file = this.dataURLtoFile(imgBase64.replace(/-/g, '+').replace(/_/g, '/').replace(/^data:image\/(png|jpeg|jpg);base64,/, ''), fileName, 'image/png')resolve(file)}})
},
// 将网络图片地址转换为File对象
async imageUrlToFile(url, fileName) {const response = await axios.get(url, { responseType: 'arraybuffer' })const imageData = response.dataconst blob = new Blob([imageData], {type: response.headers['content-type']})return new File([blob], fileName, { type: blob.type })
},
// 读取File对象内容
getFileData(file) {return new Promise((resolve, reject) => {const reader = new FileReader()reader.readAsDataURL(file)reader.onload = e => {resolve(e.target.result)}})
}

补充

// 将网络图片地址转换为File对象
async imageUrlToFile(url, fileName) {const response = await axios.get(url, { responseType: 'arraybuffer' })const imageData = response.dataconst blob = new Blob([imageData], {type: response.headers['content-type']})return new File([blob], fileName, { type: blob.type })
}

 

node端方式

npm install sharp
const sharp = require('sharp');// 旋转图像并保存
sharp('path/to/input/image.jpg').rotate(90).toFile('path/to/output/image.jpg', (err, info) => {if (err) {console.error(err);} else {console.log('图像旋转并保存成功');}});

其他工具包:jimp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/836222.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

202222313 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1. 实验内容 1.1 实验要求 (1)掌握metasploit、nmap的用法。 (2)学习前期渗透的方法。 (3)利用4个漏洞,实现对靶机的攻击。 1.2 学习内容 (1)metasploit的用法:可以简单总结为“Search-Use-Show-Set-Exploit/run”。 (2)四种漏洞的原理。Vsftpd源码包后门漏洞:在特定版本的v…

创建表(1)

1.切换操作的数据库,默认是在MySQL中进行操作2.创建表,遵循固定格式,枚举可用enum(‘’,‘’)限制条件可用notnull 默认可设置default‘ ’3.修改表:可以用alter table进行修改 alter table 表名 add 列名 数据类型 列级约束条件; alter table 表名 drop column 列名 …

Flutter项目实战(1):通用项目框架搭建

下面介绍 Flutter 最基本的通用项目框架搭建,同时实现了一个登录界面图标和登录界面。 先看下效果图:使用ScreenUtilInit自适应界面大小; 使用Stack支持多个子界面在同一个全屏主界面上选择显示; 使用 Get 插件实现界面之间的跳转和国际化翻译; 界面都通过Transform实现了…

Rocky安装htop

本篇抄的,放在这里防止自己忘记 两条命令: dnf install epel-release -y dnf install htop -yhtop测试: [root@localhost ~]# htop //回车后出现如下图,按q退出

数据采集与融合第四次作业

码云仓库地址 https://gitee.com/sun-jiahui22/crawl_project作业1仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业4/实验4.1作业2的仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业4/实验4.2作业3的仓库地址 https://gitee…

2-SQL注入渗透与攻防

1、SQL注入基础 1.1 什么是sql注入 一、SQL注入概述 二、数据库概述 1.关系型数据库 关系型数据库,存储格式可以直观的反映实体间的关系,和常见的表格比较相似 关系型数据库中表与表之间有很多复杂的关联关系的 常见的关系型数据库有MySQL、Orcale、PostgreSQL、SQL Server等…

vscode go语言注释语句黄色波浪线

go语言注释代码总是飘着黄色波浪线提示:(with optional leading article) (ST1021)go-staticcheck,非常影响观感。 经过查询发现,go-staticcheck 是一个用于 Go 代码静态分析的工具,用来检测代码中的潜在问题、代码规范以及常见的错误。本次错误信息来自 go-staticcheck 中…

1-信息收集

1.1 域名信息 whois、域名反查、ICP备案、企业信息查询 子域名收集工具:Layer子域名挖掘机等 原理:枚举、字典 域名:baidu.com 子域名:news.baidu.com、map.baidu.com、www.baidu.com、... 域名DNS信息 Domain Name Server 域名解析服务www.baidu.com --> 域名解析服务 …

springboot~jpa优雅的处理isDelete的默认值

如果多个实体类都有 isDelete 字段,并且你希望在插入时为它们统一设置默认值,可以采取以下几种方法来减少代码重复: 1. 使用基类(抽象类) 创建一个基类,其中包含 isDelete 字段和 @PrePersist 方法。然后让所有需要这个字段的实体类继承这个基类。 示例代码: import jav…

20222412 2024-2025-1 《网络与系统攻防技术》实验六实验报告

20222412 2024-2025-1 《网络与系统攻防技术》实验六实验报告 1.实验内容 主要任务:基于Metasploit框架,实现漏洞利用。 Metasploit框架(MSF)由HD Moore于2003年发布,并在2007年使用Ruby语言重写。它提供了一套完整的渗透测试框架,包括漏洞利用模块、攻击载荷、辅助模块、…

01计算机简介

001简介 计算机硬件逻辑组成