使用html2Canvas生成图片时,img标签无法显示的处理方法

为了解决 使用html2Canvas生成图片时,img图片无法正常显示 原因是:图片跨域问题,将图片地址转换为base64

//将图片转换为base64格式
function getBase64Image(img) {
  const canvas = document.createElement('canvas')
  canvas.width = img.width
  canvas.height = img.height
  const ctx = canvas.getContext('2d')
  ctx.drawImage(img, 0, 0, img.width, img.height)
  const dataURL = canvas.toDataURL('image/png') // 可选其他值 image/jpeg
  return dataURL
}
//处理图片跨域
function handleImg(src) {
  const image = new Image()
  image.crossOrigin = '*' // 必须在image之前赋值
  image.src = src + '?v=' + Math.random() // 处理缓存
  image.onload = function () {
    const base64 = getBase64Image(image)
    //img标签的src赋值
    imgUrl.value = base64  
  }
}
### 如何使用 html2canvas 生成网页截或元素截 #### 安装与引入库 为了在项目中使用 `html2canvas`,可以通过 npm 或者直接在 HTML 文件中通过 `<script>` 标签引入该库。 如果选择通过 npm 安装,则可以执行如下命令: ```bash npm install html2canvas ``` 之后,在 JavaScript 文件里导入此模块: ```javascript import html2canvas from &#39;html2canvas&#39;; ``` 如果是直接在页面内引用 CDN 版本的话,可以在 HTML 中加入下面这行代码[^1]: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> ``` #### 实现网页整体截功能 要捕获整个网页的内容并将其转换成图片形式,只需调用 `html2canvas()` 方法并将目标 DOM 对象作为参数传递给它。这里展示了一个简单的例子来说明如何获取当前页面的快照,并将结果附加到指定位置显示出来: ```javascript // 获取body下的所有内容作为截对象 html2canvas(document.body).then(canvas => { // 将 canvas 转换成 img 元素 const image = document.createElement(&#39;img&#39;); image.src = canvas.toDataURL(); // 添加至页面中预览 document.body.appendChild(image); }); ``` #### 针对单个元素进行截操作 除了能够拍摄整页视之外,`html2canvas` 还允许针对特定区域内的节点实施局部渲染工作。比如想要仅截取某个 div 的画面,只需要把对应的容器传入即可完成任务: ```javascript const elementToCapture = document.querySelector(&#39;#specific-element&#39;); // 替换为实际的选择器 html2canvas(elementToCapture).then(canvas => { let link = document.createElement(&#39;a&#39;); link.download = "screenshot.png"; link.href = canvas.toDataURL(); link.click(); // 自动触发下载行为 }); ``` 需要注意的是,当处理包含跨域资源(如外部加载的图片)的情况时,应当确保这些资源所在的服务器已设置好 CORS 头部信息,并适当调整插件的相关属性配置以防止安全策略阻止请求的发生。 另外,对于某些复杂 CSS 效果的支持程度有限,所以在正式应用之前最好先做充分测试确认预期效果是否满足需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值