前端 JS 经典:图片裁剪上传原理

前言:图片裁剪一般都是用户选择头像时用到,现在很多插件都可以满足这个功能,但是我们不仅要会用插件,还要自己懂的裁剪原理。

1. 流程

流程分为:1. 预览本地图片 2. 选择裁剪区域 3. 上传裁剪图像

2. 如何预览图片

通过 FileReader 构造函数,将本地的图片,转换成 base64 的地址,不通过网络请求,直接预览。

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><metaname="viewport"content="initial-scale=1.0, user-scalable=no, width=device-width"/><title>document</title><style>.preview {width: 500px;height: 500px;margin: 0 auto;object-fit: cover;}</style></head><body><input type="file" /><img class="preview" /><script>const inp = document.querySelector("input");const img = document.querySelector("img");inp.onchange = (e) => {const file = e.target.files[0];const reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => {img.src = reader.result;};};</script></body>
</html>

3. 上传裁剪后图片

实现思路:上传图片本质是上传文件,我们需要得到一个文件 file 对象,怎么拿到 file 对象呢,通过 canvas 画出裁剪图然后导出为 blob 对象,然后将 blob 对象转为 file 对象我们就可以进行上传了。

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><metaname="viewport"content="initial-scale=1.0, user-scalable=no, width=device-width"/><title>document</title><style>.preview {width: 500px;height: 500px;margin: 0 auto;object-fit: cover;}</style></head><body><input type="file" /><img class="preview" /><button>点击上传裁剪图</button><script>const inp = document.querySelector("input");const img = document.querySelector("img");const btn = document.querySelector("button");inp.onchange = (e) => {const file = e.target.files[0];const reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => {img.src = reader.result;};};function uploadResult({ cutWidth, cutHeight, cutX, cutY }) {const cvs = document.createElement("canvas");const ctx = cvs.getContext("2d");cvs.width = 200;cvs.height = 200;ctx.drawImage(img,cutX,cutY,cutWidth,cutHeight,0,0,cvs.width,cvs.height);document.body.appendChild(cvs);cvs.toBlob((blob) => {const file = new File([blob], "cut.png", { type: "image/png" });// 上传 file 对象console.log(file);});}btn.onclick = () => {uploadResult({cutWidth: 100,cutHeight: 100,cutX: 250,cutY: 250,});};</script></body>
</html>

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

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

相关文章

小熊家务帮day10-day12 门户管理(缓存,主页,定时任务)

门户管理 1 门户介绍1.1 介绍1.2 常用技术方案 2 缓存技术方案2.1 需求分析2.1.1 C端用户界面原型2.1.2 缓存需求2.1.3 使用的工具 2.2 项目基础使用2.2.1 项目集成SpringCache2.2.2 测试Cacheable需求Service测试 2.1.3 缓存管理器&#xff08;设置过期时间&#xff09;2.1.4 …

计算机毕业设计PySpark+Hadoop地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Flink Hadoop 深度学习

基于Hadoop的地震预测的 分析与可视化研究 姓 名&#xff1a;____田伟情_________ 系 别&#xff1a;____信息技术学院___ 专 业&#xff1a;数据科学与大数据技术 学 号&#xff1a;__2011103094________ 指导教师&#xff1a;_____王双喜________ 年 月 日 …

sqli-labs 靶场 less-5、6 第五关和第六关:判断注入点、使用错误函数注入爆库名、updatexml()函数

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 5 SQLI DUMB SERIES-5 判断注入点&#xff1a;1. 首先&#xff0c;尝试正常的回显内容&#x…

Hadoop3:MapReduce源码解读之Map阶段的TextInputFormat切片机制(3)

Job那块的断点代码截图省略&#xff0c;直接进入切片逻辑 参考&#xff1a;Hadoop3&#xff1a;MapReduce源码解读之Map阶段的Job任务提交流程&#xff08;1&#xff09; 5、TextInputFormat源码解析 类的继承关系 它的内容比较少 重写了两个父类的方法 这里关心一下泛型参数…

【Python报错】已解决Attributeerror: ‘list‘ object has no attribute ‘join‘( Solved)

解决Python报错&#xff1a;AttributeError: ‘list’ object has no attribute ‘join’ (Solved) 在Python中&#xff0c;字符串&#xff08;str&#xff09;对象有一个非常有用的join()方法&#xff0c;它允许你将序列中的元素连接&#xff08;join&#xff09;成一个字符串…

机器学习笔记 - 本地windows 11 + PyCharm运行stable diffusion流程简述

一、环境说明 硬件:本地电脑windows11、32.0 GB内存、2060的6G的卡。 软件:本地有一个python环境,主要是torch 2.2.2+cu118 二、准备工作 1、下载模型 https://huggingface.co/CompVishttps://huggingface.co/CompVis 进入上面的网址,我这里下载的是这个里面的 …

最新付会进群多群同时变现社群系统V3.5.3版本 详细教程+源码下载

市面1888最新付费进群多群同时变现系统V3.5.3版本 详细教程源码下载介绍&#xff1a; 续男粉变现&#xff0c;相亲群变现后 演化出来的最新多群同时变现系统 可同时进行40个群同时变现 可设置地域群&#xff0c;相亲&#xff0c;男粉变现等多种群 购买后包括详细的 域名服…

人工智能安全综述

文 | 华北电力大学 李建彬 谯婷 秦淑梅 李智勇 近年来&#xff0c;人工智能技术发展取得了长足的进步&#xff0c;在多个领域广泛应用&#xff0c;特别是以 ChatGPT 为代表的生成式人工智能技术开启了人工智能应用的新纪元。随着人工智能技术及应用的迅猛发展&#xff0c;也带…

Linux文件系统(操作系统的文件管理)

一.Linux系统的文件接口 我们先介绍下Linux系统俩种的文件接口&#xff0c;引出一些问题。 1.open&#xff08;&#xff09; 我们看下说明&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int open(const char *pathname,…

HOW - 用 Typescript 编写一个比较好的 Class

目录 一、介绍二、示例2.1 示例类代码2.2 单元测试 一、介绍 代码格式统一。包括统一缩进和尽量使用清晰且统一风格的变量和函数命名注释和文档。编写必要且清晰的注释和文档使用让面试官眼前一亮的现代新特性&#xff0c;代码简洁。例如可选链&#xff08;Optional Chaining&…

《大道平渊》· 拾 —— 身心的“肥胖”与我们不知饥渴的病:追求中的丰盈与节制

《平渊》 拾 "水满则溢&#xff0c;月盈则亏。" 《道德经》有言&#xff1a;"水满则溢&#xff0c;月盈则亏"。 意思是&#xff1a;水满了就会溢出&#xff0c;月亮最圆的时候就会走向亏的状态。 这揭示了自然界和人类社会中一切事物的内在规律 —— 任…

[office] excel表格锁定计算公式的方法步骤 #经验分享#媒体#职场发展

excel表格锁定计算公式的方法步骤 Excel中经常需要使用到表格锁定公式的技巧&#xff0c;计算公式具体该如何锁定呢?接下来是小编为大家带来的excel表格锁定计算公式的方法&#xff0c;供大家参考。 excel表格锁定计算公式的方法 计算公式锁定步骤1&#xff1a;如图&#xff0…

Proxmox VE虚拟机与容器管理平台安装指南

上篇文章说了ESXI和Proxmox VE&#xff08;简称pve&#xff09;区别&#xff0c;由于需要从esxi5.迁移到PVE8.2&#xff0c;所以开始简单的在一个测试机上的部署个说明指南&#xff0c;以备无患。 一、引言 Proxmox VE是一款基于Debian Linux的完全开源平台&#xff0c;专为虚…

6-Maven的使用

6-Maven的使用 常用maven命令 //常用maven命令 mvn -v //查看版本 mvn archetype:create //创建 Maven 项目 mvn compile //编译源代码 mvn test-compile //编译测试代码 mvn test //运行应用程序中的单元测试 mvn site //生成项目相关信息的网站 mvn package //依据项目生成 …

【代码随想录】【算法训练营】【第30天】 [322]重新安排行程 [51]N皇后 [37]解数独

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 30&#xff0c;周四&#xff0c;好难&#xff0c;会不了一点~ 题目详情 [322] 重新安排行程 题目描述 322 重新安排行程 解题思路 前提&#xff1a;…… 思路&#xff1a;回溯。 重点&…

023、键管理_数据库

dbsize、select、flushdb/flushall命令。 1.切换数据库 select dbIndexRedis默认配置中是有16个数据库: databases 16 select15选择最后一个数据库,不同库可以存在相同的键: 127.0.0.1:6379> set hello world #默认进到0号数据库 OK 127.0.0.1:6379> get hello &qu…

RabbitMQ--Hello World(基础详解)

文章目录 先决条件RabbitMQ 初识RabbitMQ--Hello World发送接收 更多相关内容可查看 先决条件 本教程假定 RabbitMQ 已安装并在标准端口 &#xff08;5672&#xff09; 上运行。如果你 使用不同的主机、端口或凭据&#xff0c;连接设置将需要 调整。如未安装可查看Windows下载…

【机器学习通用流程】

文章目录 一、机器学习概述1. 机器学习的定义2. 机器学习的分类3. 机器学习的应用实例 二、数据准备和预处理1. 数据采集2. 数据清洗3. 数据转换 三、选择合适的机器学习模型1. 常见的机器学习模型决策树&#xff08;Decision Trees&#xff09;支持向量机&#xff08;Support …

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:桥梁结构安全监测

中国铁路设计集团有限公司&#xff08;简称中国铁设&#xff09;&#xff0c;原铁道第三勘察设计院集团有限公司&#xff08;铁三院&#xff09;&#xff0c;是中国国家铁路集团有限公司所属的唯一设计企业&#xff0c;成立于1953年&#xff0c;总部位于天津市&#xff0c;是以…

f4pga环境搭建教程

f4pga环境搭建教程 背景介绍 FOSS Flows For FPGA (F4PGA) project&#xff0c;是一套开源的FPGA工具链&#xff0c;号称the GCC of FPGAs&#xff0c;作用是将写的硬件描述语言&#xff08;verilog或VHDL&#xff09;转化为可以在FPGA上运行的可执行文件&#xff08;bit文件…