相关文章推荐
空虚的枕头  ·  jsPDF ...·  1 周前    · 
讲道义的鸡蛋  ·  C# ...·  1 年前    · 
爱运动的乌龙茶  ·  SQL Server JDBC Error ...·  1 年前    · 
满身肌肉的滑板  ·  社区云·  1 年前    · 

首先这个问题会出现在需要图片编辑的业务中,在我们做图片旋转、放大、移动等操作时,被处理的图片会超出原本的容器,此时我们会给父容器增加一个属性overflow:hidden,这样就显示不会出现溢出问题,此时我们去做截图操作生成的图片正常的,hidden部分不会出现,可以有网上提问 利用html2canvas保存图片时div中overflow:hidden也显示了出来 ,像这种情况本人在实际的运用中也是遇到过的。原因其实很简单的。
在html2canvas社区也提出这个问题 Not hiding overflow:hidden data

  1. 其实就我们嵌套了两层容器,我们查看通常情况下 overflow:hidden不起作用的一种情况 ,这些都是显示出了问题罢了,先看以代码
    <1>、情景一
//父容器
  <div class="albumpreviewdiv">
          //添加图片的容器
          <div style="overflow: hidden;width: 100%" id="frame_content_add">
            <img  src="static/img/icon_tianjia@3x.png" class="frame_add" id="frame_add" >
          //蒙版图 在最上层
          <img class="frame_mask" v-bind:src="getimg(frame_data.img)">
  ......
 //截图操作
  var mainCancas = document.createElement("canvas"),
              ctx = mainCancas.getContext('2d');
      mainCancas.width = 800;
      mainCancas.height = 800 / _this.aspect_ratio;
      ctx.rect(0, 0, 800, 800 / _this.aspect_ratio);
      ctx.fillStyle = '#fff';
      ctx.fill();
      html2canvas($('.albumpreviewdiv'), {
        onrendered: function (canvas) {
          ctx.drawImage(canvas,0,0, 800, 800 / _this.aspect_ratio);
          var src = mainCancas.toDataURL();

效果图:
这里写图片描述 结果还好,没有溢出,这是手机web生成的清晰还好,我的上一篇提到了截图模糊的问题。

<1>、情景二

  <div class="albumitemcontent">
    <a style="overflow: hidden;position: absolute;background:#F2F2F2;display: none" >
        <img  src="static/img/icon_tianjia@3x.png" style="width: 0.5rem;height: 0.5rem;position: absolute" >
        <img style="position: absolute;z-index: 100" onclick="document.querySelector('input').click()" @click="inputBtn($event)" >
    <a style="overflow: hidden !important;position: absolute;background:#F2F2F2;display: none" >
        <img  src="static/img/icon_tianjia@3x.png" style="width: 0.5rem;height: 0.5rem;position: absolute" >
        <img style="position: absolute;z-index: 100" onclick="document.querySelector('input').click()" @click="inputBtn($event)">
  </div>

此时布局页面变得复杂了,子容器不再是一个了,直接截图的结果就是
效果一我在右边的容器添加的图片截图结果左边也显示出来了,这就很尴尬了。方法那就只能分单个容器来操作了,最后在绘制到同一张画布上去,看代码

  var mainCancas = document.createElement("canvas"),
           ctx = mainCancas.getContext('2d');
   mainCancas.width = 1500/_this.zoom;
   mainCancas.height = 1500/_this.zoom/1.4150;
   ctx.rect(0, 0, 1500/_this.zoom, 1500/_this.zoom/1.4150);
   ctx.fillStyle = '#fff';
   ctx.fill();
   html2canvas($('#base_f_'+0), {
                  onrendered: function(canvas0) {
                      ctx.drawImage(canvas0,_this.data[0][0].x/_this.zoom,_this.data[0][0].y/_this.zoom);
   html2canvas($('#base_s_'+0), {
      onrendered: function(canvas1) {   
      //这里有事需要 设置绘制的初始点,x y值                         ctx.drawImage(canvas1,_this.data[0][1].x/_this.zoom,_this.data[0][1].y/_this.zoom);
                             // window.open(mainCancas.toDataURL("image/png"));                         
                              var url =mainCancas.toDataURL("image/png");

这样生成图片就OK了
这里写图片描述

首先这个问题会出现在需要图片编辑的业务中,在我们做图片旋转、放大、移动等操作时,被处理的图片会超出原本的容器,此时我们会给父容器增加一个属性overflow:hidden,这样就显示不会出现溢出问题,此时我们去做截图操作生成的图片正常的,hidden部分不会出现,可以有网上提问利用html2canvas保存图片时div中overflow:hidden也显示了出来,像这种情况本人在实际的运用中也是遇到
低版本HTML2canvas 前端开发 生成海报 截图等功能 1.该脚本允许您直接在用户浏览器上对网页或其部分进行“截图”。屏幕截图基于 DOM,因此可能不是 100% 准确到真实表示,因为它不会制作实际的屏幕截图,而是根据页面上可用的信息构建屏幕截图。 2.它只能正确渲染它理解的属性,这意味着有许多 CSS 属性不起作用; html2canvas官网 https://html2canvas.hertzen.com/ Firefox 3.5+ Google Chrome Opera 12+ Safari 6+
鉴于找我讨论坑点的同仁比较多,直接建了交流群,欢迎大家加入: 毕竟众人拾柴火焰高,有可能你遇到的问题就是别人已经解决的。 (若二维码失效,加我好友【二维码没过期请自行加群,不用添加好友~】(微信号:),加好友请输入暗号:html2canvas填坑群,拉你进群) 因为万恶的广告份子总是进群撒广告、然后加我好友骚扰!这种技术群也进来撒广告!实在很过分!!所以连夜紧急去掉微信二维码和我的微信号了(现在...
根据你提供的代码,可能是因为你使用了Vue的语法,但是没有引入Vue。如果你想在Vue中使用这段代码,需要先在Vue组件内引入Vue,并且将该代码放在template标签内,如下所示: ```html <template> <view style="width: 0;height: 0;overflow: hidden;position:fixed;left: 200%;" :style="'width':'50rpx'"> <canvas canvas-id="firstCanvas" style="border:1px solid #000000;" class="canvas"></canvas> </view> </template> <script> import Vue from 'vue' export default { name: 'MyComponent', // ... </script> 如果你不是在Vue中使用该代码,可能还需要提供更多的上下文信息,才能进一步确定报错原因。