当前位置: 首页 > news >正文

解决html-to-image在 ios 上dom里面的图片不显示出来

原因:在iOS的Safari浏览器,使用页面生成图片,如dom里面有图片,则会先进行加载资源,但是这个加载速度会随着图片大小而延长,但是页面生成图片的时机总会比这个快。所以会导致dom里面的图片不会出来

解决方案:这里我是用了vue3。

const captureSnapshot = async (targetElement,options,previousDataUrl = "") => {const dataUrl = await htmlToImage.toPng(targetElement,options)// 这是判断因为 dataUrl 对快照图像进行了编码,而 Safari 现在渲染的内容比上次更多。dataUrl 的长度提供了一些关于渲染内容的信息。直到dataUrl.length停止增加,表明 Safari 已完成渲染。return (dataUrl.length !== previousDataUrl.length)? captureSnapshot(targetElement,options,dataUrl): dataUrl
}// 页面上传图片
const generateReport = () => {let offscreenContainer = document.getElementById('my-node');// 这个options无所谓,主要是captureSnapshot方法和下面给img加上decoding="sync"属性let options = {quality: 0.95,backgroundColor: '#ffffff',width: offscreenContainer.scrollWidth,height: offscreenContainer.scrollHeight,pixelRatio: window.devicePixelRatio > 2 ? 2 : window.devicePixelRatio,filter: function (node) {if (node.tagName === 'IMG' && (!node.src || node.src === '')) {return false;}if (node.classList && node.classList.contains('landscape-wrap')) {return false;}if (node.classList && node.classList.contains('link-more')) {return false;}return true;},canvasTimeout: 15000,useCORS: true,skipAutoScale: true,allowTaint: true,// iOS兼容性设置preferredFontFormat: 'woff2',skipFonts: false,style: {transform: 'scale(1)',transformOrigin: 'top left'},};try {// 确保所有图表都已渲染完成await nextTick();// 这个也是关键代码。给offscreenContainer里面的img添加decoding="sync"属性,不然ios上还是会显示不出dom里面的图片offscreenContainer.querySelectorAll('img').forEach(img => {img.setAttribute('decoding', 'sync');});// 转换为png格式imgSrc.value = await captureSnapshot(offscreenContainer,options);} catch (error) {console.error('生成失败:', error);}
}


http://www.xdnf.cn/news/1310923.html

相关文章:

  • [Linux] Linux交换空间管理 Linux系统启动原理
  • 8.16 pq
  • 从 Windows 到 Linux 服务器的全自动部署教程(免密登录 + 压缩 + 上传 + 启动)
  • 嵌入式硬件篇---运算放大器
  • 要想在Trae运行Java程序,该怎样配置Java环境?
  • TOGAF八步一法笔记2
  • TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别
  • RocketMq面试集合
  • 暴雨服务器:以定制化满足算力需求多样化
  • 小白挑战一周上架元服务——元服务开发06
  • 肖臻《区块链技术与应用》第20-22讲 - 以太坊难度调整、权益证明和智能合约
  • 415. 字符串相加
  • Java设计模式之《工厂模式》
  • 【Java web】HTTP 协议详解
  • HTTP 1.0, 2.0 和 3.0 有什么区别?
  • OpenAI TTS API + Web 前端 AudioContext 实战方案
  • (论文速读)ViDAR:视觉自动驾驶预训练框架
  • leetcode-139. 单词拆分-C
  • 中本聪思想与Web3的困境:从理论到现实的跨越
  • 从依赖到自研:一个客服系统NLP能力的跃迁之路
  • 昇腾AI自学Day2-- 深度学习基础工具与数学
  • Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
  • 异构数据库兼容力测评:KingbaseES 与 MySQL 的语法・功能・性能全场景验证解析
  • linux设备驱动之字符设备驱动
  • Python代码规范与静态检查(ruff/black/mypy + pyproject.toml + Makefile)自动化工具链介绍
  • 【LeetCode 热题 100】70. 爬楼梯——(解法二)自底向上
  • 在鸿蒙应用中快速接入地图功能:从配置到实战案例全解析
  • ISO27001 高阶架构 之 支持 -2
  • PHP域名授权系统网站源码/授权管理工单系统/精美UI/附教程
  • 广东省省考备考(第七十八天8.16)——资料分析、判断推理(强化训练)