JS实现选择图片剪裁及保存

以下是一个简单的示例代码,实现了显示一个文件上传框和一个canvas元素。用户可以选择一张图片文件后,该图像将显示在canvas中,并且用户可以通过鼠标拖拽来选取需要剪裁的区域。单击“剪裁”按钮,程序会将结果保存为新的图片文件并在浏览器中下载。

先看效果图:

源码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>JS图片剪裁并保存</title>
</head>
<body>    <canvas id="canvas" width="800" height="600" style="border:1px solid #000;"></canvas><div>       <input type="file" id="fileInput"><button id="cropButton" disabled>剪裁</button> 用户可以拖动鼠标来选择需要剪裁的区域       </div><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');let image = null;let isDragging = false;let startX = 0;let startY = 0;let endX = 0;let endY = 0;// 加载图片const loadImage = (file) => {const reader = new FileReader();reader.onload = (e) => {image = new Image();image.onload = () => {ctx.drawImage(image, 0, 0);};image.src = e.target.result;};reader.readAsDataURL(file);disableButtons(); //};// 监听文件上传事件const fileInput = document.getElementById('fileInput');fileInput.addEventListener('change', (e) => {const file = e.target.files[0];loadImage(file);});// 监听鼠标事件,绘制选择区域canvas.addEventListener('mousedown', (e) => {if (isDragging) return;isDragging = true;startX = e.offsetX;startY = e.offsetY;endX = startX;endY = startY;});canvas.addEventListener('mousemove', (e) => {if (!isDragging) return;endX = e.offsetX;endY = e.offsetY;ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.drawImage(image, 0, 0);ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';ctx.fillRect(startX, startY, endX - startX, endY - startY);});canvas.addEventListener('mouseup', () => {isDragging = false;if (endX > startX && endY > startY) {enableButtons();}});// 监听确定按钮点击事件,剪裁并保存图片const cropButton = document.getElementById('cropButton');cropButton.addEventListener('click', () => {disableButtons();const croppedCanvas = document.createElement('canvas');const croppedCtx = croppedCanvas.getContext('2d');const width = endX - startX;const height = endY - startY;croppedCanvas.width = width;croppedCanvas.height = height;croppedCtx.drawImage(canvas, startX, startY, width, height, 0, 0, width, height);const url = croppedCanvas.toDataURL();const link = document.createElement('a');link.download = 'cropped-image.png';link.href = url;document.body.appendChild(link);link.click();document.body.removeChild(link);});// 激活按钮const enableButtons = () => {cropButton.disabled = false;           };// 禁用按钮const disableButtons = () => {cropButton.disabled = true;   };</script>
</body>
</html>

OK!

JS实现选择图片剪裁及保存相关推荐

  1. android完美实现 拍照 选择图片 剪裁等代码分享

    2个安卓实现实现 拍照 选择图片 剪裁等的代码,都是从正式项目中提取出来了,非常实用,有需要的小伙伴可以参考下. 前言,版本兼容问题主要是由于4.4以前和4.4以后的Uri的格式不同所造成的错误 1. ...

  2. [js] 使用js实现一个图片剪裁的功能

    [js] 使用js实现一个图片剪裁的功能 /** * 裁切图片* @param imgUrl 原始图片路径* @param x,y,width,height 从点[x, y]开始,将宽度width,高 ...

  3. android 画板(选择图片作为背景并保存)

    我看了一下网上画板的写法有很多种,这篇文章的写法就是简单便捷,个人觉得不错,大家可以参考一下, http://blog.csdn.net/qq_31530015/article/details/511 ...

  4. 58行html/js代码实现图片裁剪并保存功能

    58行html/js代码实现图片裁剪保存功能 <input type="file" id="file-input" accept="image/ ...

  5. java实现保存一张图片_Java图片剪裁并保存的代码实现

    这是一篇入门级文章,高手请略过. 在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中. 我们将通过以下步骤来学习: 输入图像,指定要处理的图像路径 允许用户拖放要 ...

  6. js实现截取网页上特定位置的图片打印或保存

    js实现截取网页上特定位置的图片打印或保存 一.实现思路   具体思路是创建一个宽和高都是100%的canvas,使其能够覆盖整个页面,然后根据所要截取的图片起始位置相对于canvas的位置(因为是1 ...

  7. 利用Album 实现仿微信图片选择(加入了图片剪裁)

    本文图片选择基于轻量开源相册 Album,在选择图片完成后会调用系统图片剪裁页面,对图片进行剪裁 效果图: 选择图片(可以自定义选择几张): 剪切图片: 使用方法 1.Gradle: compile ...

  8. iOS上传头像, 相册权限,相册权限,拍照上传,相册选择图片,拍照页面语言设置,保存到相册...

    2019独角兽企业重金招聘Python工程师标准>>> 1. 权限 在打开相机拍照或者打开相册选择图片之前, 有必要先判断先是否有权限, 如果没有权限应该给个提示, 让用户自己去设置 ...

  9. AndroidStudio调用系统相册选择图片并显示、将图片保存到私有空间

    有时候为了能让用户自定义软件的背景,我们需要实现从系统相册选择一张图片并将其进行保存,在后面打开的时候继续使用该图片充当背景.为什么要保存到私有空间呢?保存和到读取私有空间的内容是不需要权限的.由于实 ...

最新文章

  1. LLVM Backend技术
  2. oracle11g dataguard完全手册3-failover active dataguard(完)
  3. php丢弃,在IIS 7.5中,PHP吓坏了(连接丢失,连接被丢弃)
  4. linux 查看flash大小,Linux OpenWRT查看CPU,RAM,Flash信息参数
  5. Buuctf(pwn) jarvisoj_tell_me_something 栈溢出
  6. Page.ClientScript、ClientScript、ScriptManager、ClientScriptManager等的详细解说
  7. rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn...
  8. matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓
  9. 计算机的iscsi配置,我们将了解如何设置自己的支持iscsi配置的存储节点
  10. [论文阅读] Cross-level Contrastive Learning and Consistency Constraint for Medical Image Segmentation
  11. 可视化,别把简单内容复杂化
  12. asp.net 利用jquery.form插件上传图片
  13. EventBus 加强学习深入了解
  14. PostgreSQL客户端无法访问数据库问题
  15. 数据分析——天猫用户购买行为分析
  16. 基于java在线问卷调查系统
  17. 中国行政村边界数据、乡镇街道边界
  18. 计算机断电无法启动不了系统,电脑因为强制断电导致系统无法正常启动的解决办法...
  19. python supervisor 检测代码变动重启_supervisor更改某项目配置后 需要重新启动才有效...
  20. 笔记本电脑常识:噪音

热门文章

  1. Python爬虫获取网页源代码出现乱码
  2. 做生意,要这样才行,呵呵
  3. Windows Media Player(WMP)对ape格式支持的方法
  4. Required type: android.support.v4.app.Fragment Provided: android.app.Fragment
  5. 《中国公路货运市场研究》报告发布 物流费占GDP16%
  6. RRDTool 详解
  7. 【GD32F427开发板试用】从0开始到RTthread移植
  8. CS3样式之3D转换和动画
  9. Java 中的函数式编程
  10. linux 获取phy状态,Linux PHY几个状态的跟踪