Html2canvas忽略了图像的object-fit属性。

6

我一直在尝试使用html2canvas来截取一个元素的屏幕截图。

我注意到div元素内部的图像使用object-fit属性后,在html2canvas截图后会被拉伸。

有没有解决方法?这是我的代码:

<script>window.addEventListener('load', function () {

      
 var bigCanvas = $("<div>").appendTo('body');
 var scaledElement = $("#Element").clone()
 .css({
  'transform': 'scale(1,1)',
  'transform-origin': '0 0'
 })
 .appendTo(bigCanvas);
 
 var oldWidth = scaledElement.width();
 var oldHeight = scaledElement.height();

 var newWidth = oldWidth * 1;
 var newHeight = oldHeight * 1;
 
 bigCanvas.css({
   'width': newWidth,
   'height': newHeight
 })


 html2canvas(bigCanvas, {
   onrendered: function(canvasq) {
   var image = document.getElementById('image');
  image.style.width='300px';
 
   image.src = canvasq.toDataURL();
   
    bigCanvas.remove() ;
   }
 });}) </script>

虽然 HTML 是这样的

<div id="Element" class="container">
  
<div class="bg-light p-3 text-center">

<h3>iPhone 12 Pro Max</h3>

<div class="m-2 shadow" style="height:400px;width:100%;">

<img src="img/agency.jpeg" style="object-fit:cover;height:100%;width:100%;" />
</div>

<h4>Now available for free</h4>

</div>

</div>

<div class="container" style="width:100%;border:2px solid black;overflow:hidden">

 <img src="" id="image" style="max-width:100%;"/>
 </div>
1个回答

3

我遇到了同样的问题,不幸的是,html2canvas似乎不支持object-fit属性,但我通过使用flexbox解决了这个问题,并且效果很好,重要的是为父节点设置宽度和高度:

 .logo-preview-inner {
      height: 200px;
      width: 200px;
      border-radius: 50%;
      border: solid 1px #e6e6e6;
      margin: 0 auto;
      overflow: hidden;
      display: flex;
      align-items: center;
      justify-content: center;
      position: relative;
      img {
        width: 100%;
      }

其中类名为.logo-preview-inner的节点是父节点,而图片则是子节点。 我希望能够帮到您!


你发布的代码不是CSS,而且实际上并不能"解决"问题,只是将图片塞入已定义的尺寸中。但是没错,它确实不受支持。 - somethinghere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接