首页 > 编程语言 >网页前端/node端实现图片旋转功能

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

时间:2024-11-18 16:31:59浏览次数:1  
标签:node const img 前端 height width new 网页 fileName

网页前端方式

// 图片旋转
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.height
      cvs.height = img.width
      let 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)
    }
  })
},
// 将图片base64对象转File对象
dataURLtoFile(base64, fileName, type = 'image/png') {
  let bstr = window.atob(base64)
  let n = bstr.length
  let u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new File([u8arr], fileName, { 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.data
  const 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

标签:node,const,img,前端,height,width,new,网页,fileName
From: https://www.cnblogs.com/senjer/p/18552946

相关文章

  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于企业人力资源管理系统的研究,现有研究主要集中在通用的人力资源管理流程及模块功能优化等方面,专门针对企业人力资源管理系统中多维度功能(如员工、部......
  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于企业人力资源管理系统的研究,现有研究主要以人力资源管理的一般性理论和传统管理模式为主。专门针对涵盖用户、员工、经理等多角色以及转岗、员工积......
  • 基于node.js毕设企业人力资源管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景随着企业规模的不断扩大和管理的日益复杂,人力资源管理的高效性和精准性成为企业发展的关键因素之一。在国内外,关于企业人力资源管理系统的研究已经取得......
  • 网页直播/点播播放器EasyPlayer.js RTSP播放器关于硬解码或者video标签渲染自动播放
    EasyPlayer.jsRTSP播放器是一个基于WebRTC(网页实时通信技术)的开源JavaScript库,主要用于在网页上实现视频播放功能,特别是针对RTSP(RealTimeStreamingProtocol,实时流协议)流的播放。它允许开发者在不需要安装额外插件或软件的情况下,直接在网页中嵌入和播放来自监控摄像头或其他R......
  • node.js毕设游戏攻略资讯补丁售卖系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于游戏攻略资讯补丁售卖系统的研究,现有研究主要以游戏的开发、运营为主,专门针对游戏攻略资讯补丁售卖系统的研究较少。在国内外游戏产业蓬勃发展的当......
  • node.js毕设生活垃圾识别与处理系统(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于生活垃圾识别与处理系统的研究,现有研究主要以垃圾的单一处理环节(如仅分类或仅处理技术)为主,专门针对集成识别与处理且结合用户激励机制(如积分奖励等......
  • 前端必知必会-JavaScript For Of循环
    文章目录JavaScriptForOf循环循环遍历数组循环遍历字符串总结JavaScriptForOf循环ForOf循环JavaScriptforof语句循环遍历可迭代对象的值。它允许您循环遍历可迭代数据结构,例如数组、字符串、映射、节点列表等:语法for(variableofiterable){//要......
  • 前端必知必会-JavaScript Break and Continue
    文章目录JavaScriptBreak和ContinueBreak语句Continue语句JavaScript标签总结JavaScriptBreak和Continuebreak语句“跳出”循环。continue语句“跳过”循环中的一次迭代。Break语句break语句用于“跳出”switch()语句。break语句也可用于跳出......
  • 【前端面试系列】Web 本地存储全面详解
    一、本地存储方案概述现代Web应用中常用的本地存储方案主要包括:CookieWebStorage(localStorage/sessionStorage)IndexedDBWebSQLDatabase(已废弃)CacheAPIFileSystemAPI二、详细介绍1.Cookie1.1基本概念Cookie是服务器发送到用户浏览器并保存在本地的......
  • node.js毕设中小企业项目管理系统的设计与实现(程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景在当今全球化的经济环境下,中小企业在各国经济发展中占据着重要地位。关于项目管理系统的研究,现有研究多集中于大型企业,针对中小企业项目管理系统的研究......