我妈已经三天没打我了 2024-01-29 11:06 采纳率: 86%
浏览 8
已结题

用html2canvas截图,怎么能把多张截图拼到一张上面,截得图宽度固定,高度不固定

用html2canvas截图,怎么能把多张截图拼到一张上面,截得图宽度固定,高度不固定

img


<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .common {
      display: flex;
      justify-content: space-around;
    }
  </style>
</head>

<body>
  <div id="chen1">
    <li class="common">
      <div class="fl">出生日期</div>
      <div class="fr">
        <span>1999-9-9</span>
      </div>
    </li>
    <li class="common">
      <div class="fl">性别</div>
      <div class="fr">
        <span></span>
      </div>
    </li>
    <li class="common">
      <div class="fl">国籍/地区</div>
      <div class="fr">
        <spanid="country">中国</spanid=>
      </div>
    </li>
    <li class="common">
      <div class="fl">证件类型</div>
      <div class="fr">
        <span id="idcard">身份证</span>
      </div>
    </li>
  </div>
  <div id="chen2">123456</div>
  <div id="chen3">河南、山东、湖北等地的累计降雪量具有极端性,河南、湖北、安徽、湖南、贵州5省将出现冻雨。
长江以南地区雨势也不弱,并伴有雷电,预计此次雨雪持续时间为今冬以来最长,影响范围也最广。</div>
  <div id="chen4">78654654</div>
  <div id="chen5">
    <p>快科技1月29日消息,据中国气象局网站,中央气象台发布重要天气提示:春节前大范围持续性强雨雪天气来袭,豫鲁鄂降雪具有极端性。</p>
<p>中央气象台预报显示,1月31日-2月5日,我国中东部地区将出现大范围持续性雨雪冰冻天气,10省将出现暴雪或大暴雪。</p>
  </div>
  <div id="chen6">ghfghdfg</div>
  <div id="chen7">gfdhgfhd</div>
  <div id="chen8">gfdgfhdfg</div>
  <div id="chen10">fghkhkfhg</div>
  <div id="chen11">
    <div class="smz">
      <div id="iszz" @click="is('Y',3)"></div>纸质
    </div>
    <div class="smz">
      <div id="iszz" @click="is('N',3)"></div>电子
    </div>
  </div>
  <div id="chen12">hjkhjlkh</div>
  <div><button>下一步</button></div>
  <!-- 智能——截图插件 -->
<script src="lib/html2canvas.js?v=76fgf.54"></script>
<script>
  function jtfuction(key,num,data,addnum){
  var id,jttype;
  switch (key) {
    case "0":
    id="chen1";
    jttype="9018";
    break;
    case "1":
    id="chen3";
    jttype="9043";
    break;
    case "2":
    id="chen5";
    jttype="9044";
    break;
    case "3":
    id="chen7";
    jttype="9045";
    break;
    case "4":
    id="chen9";
    jttype="9050_2";
    break;
    case "5":
    id="chen11";
    jttype="9050_1";
    break;
    
  }
  //智能微投截图
  var c_height =document.getElementById(id).offsetTop;
  var r_height=$("#"+id).height();
  html2canvas(document.querySelector("#"+id),{
    width: 1400,
    height:r_height,
    y:c_height,
    useCORS:true,
  }).then(function(canvas){
      var jtpostdata = {
        "type": jttype,
        "img_src":canvas.toDataURL("image/jpeg",0.5).replace("data:image/jpeg;base64,", '')
      };
      $.ajax({
        type: 'POST',
        url: commonurl + 'upload/photo',
        data: JSON.stringify(jtpostdata),
        timeout: 30000,
        contentType: "application/json",
        async: true,
        dataType: 'json',
        success: function(req) {
          if (req.result_code == "0") {
            //成功
            
          } else {
            $('#loadingToast').hide();
            hxui.toast("图片上传失败请重新上传");
          }
          $('#loadingToast').hide();
        },
        complete: function(XMLHttpRequest, status) { 
          if (status == 'timeout') {
            $('#loadingToast').hide();
            $("#errInfo").show();    
          }    
        },
        error: function() {
          $('#loadingToast').hide();
        }
      });
  })
}
</script>
</body>
</html>
  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-29 11:07
    关注

    引自免费微信小程序:皆我百晓生

    为了实现将多张截图拼合成一张图像,可以按照以下步骤:

    1. 首先,确定要截取的多个元素,将它们包装到一个共同的父元素中,确保父元素有足够的高度容纳所有子元素。

    示例代码:

    <div id="parent">
      <div id="child1">
        <!-- 第一个要截取的元素 -->
      </div>
      <div id="child2">
        <!-- 第二个要截取的元素 -->
      </div>
      <!-- 其他要截取的元素 -->
    </div>
    
    1. 在JavaScript中,使用html2canvas库来截取每个子元素的截图,使用Promise.all()方法确保所有截图都完成。

    示例代码:

    const parentElement = document.getElementById("parent");
    const childrenElements = parentElement.children;
    const promises = [];
    
    for (let i = 0; i < childrenElements.length; i++) {
      const childElement = childrenElements[i];
      const promise = html2canvas(childElement);
      promises.push(promise);
    }
    
    Promise.all(promises)
      .then((canvases) => {
        // 在这里将所有截图拼合成一张图像
        const finalCanvas = document.createElement("canvas");
        const finalContext = finalCanvas.getContext("2d");
    
        // 计算拼合后图像的宽度和高度
        const totalHeight = childrenElements.reduce(
          (acc, element) => acc + element.offsetHeight,
          0
        );
        const width = 1400; // 固定宽度
        const height = totalHeight;
    
        finalCanvas.width = width;
        finalCanvas.height = height;
    
        let y = 0;
        for (let i = 0; i < canvases.length; i++) {
          const canvas = canvases[i];
          finalContext.drawImage(canvas, 0, y);
          y += canvas.height;
        }
    
        // 在这里使用 finalCanvas
        // ...
    
        // 可以将 finalCanvas 转换为图片,或者保存到服务器等
        const imageURL = finalCanvas.toDataURL("image/png");
        console.log(imageURL);
      })
      .catch((error) => {
        console.error(error);
      });
    
    1. 最终,可以将finalCanvas转换为图片,例如使用toDataURL()方法将其转换为图片URL,或者将其上传到服务器。

    以上是使用html2canvas库将多张截图拼合成一张图像的一种解决方案。请注意,根据实际情况和具体需求,可能需要进行一些调整和修改。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月11日
  • 创建了问题 1月29日

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘