当前位置: 首页 > 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.dtcms.com/a/334624.html

相关文章:

  • 《Python 单例模式(Singleton)深度解析:从实现技巧到争议与最佳实践》
  • 【自动化运维神器Ansible】Ansible逻辑运算符详解:构建复杂条件判断的核心工具
  • Manus AI与多语言手写识别的技术突破与行业变革
  • c#Blazor WebAssembly在网页中多线程计算1000万次求余
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • 基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
  • qsort实现数据排序
  • cuda编程笔记(15)--使用 CUB 和 atomicAdd 实现 histogram
  • PMP-项目管理-十大知识领域:进度管理-制定时间表、优化活动顺序、控制进度
  • 进程替换:从 “改头换面” 到程序加载的底层逻辑
  • 【深度学习计算性能】05:多GPU训练
  • TypeScript快速入门
  • MCP 大模型的扩展坞
  • 洛谷P1595讲解(加强版)+错排讲解
  • php版的FormCreate使用注意事项
  • 基于单片机的防酒驾系统设计
  • NY243NY253美光固态闪存NY257NY260
  • 24. async await 原理是什么,会编译成什么
  • 惠普声卡驱动win10装机完成检测不到声卡
  • Three.js 材质系统深度解析
  • 云原生俱乐部-RH124知识点总结(1)
  • 【CV 目标检测】Fast RCNN模型①——与R-CNN区别
  • 解锁 AI 音乐魔法,三款音乐生成工具
  • 《P4180 [BJWC2010] 严格次小生成树》
  • 服务器配置开机自启动服务
  • 基于深度强化学习的多用途无人机路径优化研究
  • 软件需求管理过程详解
  • 缓存一致性协议(Cache Coherence Protocols)与 目录协议(Directory Protocols)简介
  • 二进制为什么使用记事本读取会出乱码
  • PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程