怎么实现HTML5页面中长按保存图片功能
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本文小编为大家详细介绍"怎么实现HTML5页面中长按保存图片功能",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么实现HTML5页面中长按保存图片功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2025年02月01日怎么实现HTML5页面中长按保存图片功能
本文小编为大家详细介绍"怎么实现HTML5页面中长按保存图片功能",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么实现HTML5页面中长按保存图片功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
下面是详细的步骤:
1. html2canvas截屏
保存的图片节点最好是img标签: 想要截屏的节点最好是img标签的图片,经测试如果是 background-image 会有点模糊,需要特别注意下。
npm i html2canvas --saveimport html2canvas from 'html2canvas';// 想要保存的图片节点const dom = document.querySelector('img');// 创建一个新的canvasconst Canvas = document.createElement('canvas');const width = document.body.offsetWidth; // 可见屏幕的宽const height = document.body.offsetHeight; // 可见屏幕的高const scale = window.devicePixelRadio; // 设备的devicePixelRadio// 将Canvas画布放大scale倍,然后放在小的屏幕里,解决模糊问题Canvas.width = width * scale;Canvas.height = height * scale;Canvas.getContext('2d').scale(scale, scale);html2canvas(dom, { canvas: Canvas, scale, useCORS: true, logging: true, width: width + 'px', hegiht: height + 'px',}).then((canvas) => { const context = canvas.getContext('2d'); // 关闭抗锯齿形 context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; // canvas转化为图片 canvas2Image(canvas, canvas.width, canvas.height);});
2. canvas2Image转化为图片
一般情况下转为jpeg格式就很不错了。
canvas2Image(canvas, canvas.width, canvas.height) { const retCanvas = document.createElement('canvas'); const retCtx = retCanvas.getContext('2d'); retCanvas.width = width; retCanvas.height = height; retCtx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height); const img = document.createElement('img'); img.src = retCanvas.toDataURL('image/jpeg'); // 可以根据需要更改格式 return img;}
3. 长按保存图片
先实现一个长按的方法,长按之后把生成的图片append到body,透明浮在屏幕上。
// 封装一个长按方法longPress(fn) { let timeout = 0; const $this = this; for (let i = 0; i < $this.length; i++) { $this[i].addEventListener('touchstart', () => { timeout = setTimeout(fn, 800); // 长按时间超过800ms,则执行传入的方法 }, false); $this[i].addEventListener('touchend', () => { clearTimeout(timeout); // 长按时间少于800ms,不会执行传入的方法 }, false); }}// 添加生成的图片到bodyconst img = canvas2Image(canvas, canvas.width, canvas.height);document.body.appendChild(img);img.style.cssText = "width:100%;height:100%;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;";
4. 完整代码如下
$.fn.longPress = function(fn) { let timeout = 0; const $this = this; for (let i = 0; i < $this.length; i++) { $this[i].addEventListener('touchstart', () => { timeout = setTimeout(fn, 800); // 长按时间超过800ms,则执行传入的方法 }, false); $this[i].addEventListener('touchend', () => { clearTimeout(timeout); // 长按时间少于800ms,不会执行传入的方法 }, false); }};$('img').longPress(() => { saveImg();});saveImg() { // 想要保存的图片节点 const dom = document.querySelector('img'); // 创建一个新的canvas const Canvas = document.createElement('canvas'); const width = document.body.offsetWidth; // 可见屏幕的宽 const height = document.body.offsetHeight; // 可见屏幕的高 const scale = window.devicePixelRatio; // 设备的devicePixelRatio // 将Canvas画布放大scale倍,然后放在小的屏幕里,解决模糊问题 Canvas.width = width * scale; Canvas.height = height * scale; Canvas.getContext('2d').scale(scale, scale); html2canvas(dom, { canvas: Canvas, scale, useCORS: true, logging: true, width: width + 'px', hegiht: height + 'px', }).then((canvas) => { const context = canvas.getContext('2d'); // 关闭抗锯齿形 context.mozImageSmoothingEnabled = false; context.webkitImageSmoothingEnabled = false; context.msImageSmoothingEnabled = false; context.imageSmoothingEnabled = false; // canvas转化为图片 const img = canvas2Image(canvas, canvas.width, canvas.height); document.body.appendChild(img); img.style.cssText = "width:100%;height:100%;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;"; }}canvas2Image(canvas, width, height) { const retCanvas = document.createElement('canvas'); const retCtx = retCanvas.getContext('2d'); retCanvas.width = width; retCanvas.height = height; retCtx.drawImage(canvas, 0, 0, width, height, 0, 0, width, height); const img = document.createElement('img'); img.src = retCanvas.toDataURL('image/jpeg'); // 可以根据需要更改格式 return img;}
读到这里,这篇"怎么实现HTML5页面中长按保存图片功能"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
图片
屏幕
方法
时间
节点
功能
页面
文章
格式
内容
最好
标签
步骤
画布
设备
锯齿
问题
生成
不错
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库的安全性和完整性区别
服务器安全隐患怎么查
广州网络安全研究院
软件开发公司开发案例分析
服务器64gb内存
天玑科技 工业互联网
干部信息大数据库
网络安全宣传周活动资料
明轩圆梦互联网科技公司
计算机网络安全防护毕业论文
http服务器连不上浏览器
恩施专业的软件开发中心
数据库实体之间的抽象
入侵检测色使用的数据库
荣耀盒子连不上服务器
pda服务器安装
xmpp服务器 prosody
数据库建设是软件的结合
品质好的网络安全接入控制
国外十大网络安全
唐山网络服务器代理
服务器和网络安全的关系
piapp服务器
局域网文件服务器管理软件
生鲜系统软件开发哪家专业
网站数据库数据分析
网络安全学科深度解读
数据管理与数据库操作的记录数量
qq批量注册软件开发
sk5服务器搭建教程视频