html5如何解决在网页长按保存图片问题
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章给大家分享的是有关html5如何解决在网页长按保存图片问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。下面是详细的步骤:1. html2canvas截屏保存的图片
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
云南ftp上传服务器
服务器centos安装
百闻软件开发用什么语言
面向对象软件开发行业标准
青浦区先进网络技术采购信息
网络技术书中atm的意思
税务系统网络安全
南通个人软件开发价格咨询
网络安全的属性包括什么
工业互联网网络安全法
关于信息基础设施网络安全响应
昆山手机软件开发
长沙安卓软件开发公司
网络安全意识培训word
腾讯网络安全直播
网络技术知识网站
复旦大学网络安全研究所
百度服务器是怎么工作的
文档服务器简称
软件开发更改申请单
树莓派作为代码托管服务器
华三服务器管理接口叫什么
华为服务器如何让硬盘联机
荆州计算机软件开发条件
数字媒体技术数据库
nba2k游戏服务器连接失败
squad服务器解封
百度服务器是怎么工作的
东莞软件开发公司电话
服务器电源过流保护维修