将图像添加到画布,但高度和宽度不符合要求

Posted

技术标签:

【中文标题】将图像添加到画布,但高度和宽度不符合要求【英文标题】:Add image to the canvas but the height and width are not as desired 【发布时间】:2021-09-13 18:48:49 【问题描述】:

我试试https://jsfiddle.net/natchiketa/xHYjz/ 和我的功能:

  function addtesst() 
      var imgURL = 'http://i.imgur.com/8rmMZI3.jpg';
      var pugImg = new Image();
      pugImg.onload = function (img) 
          var pug = new fabric.Image(pugImg, 
              width: 800,
              height: 1000,
              left: 150,
              top: 170,
              scaleX: 0.41,
              scaleY: 0.42
          );
          canvas.add(pug);
      ;
      pugImg.src = imgURL;
  

结果:

var imgURL = 'http://i.imgur.com/8rmMZI3.jpg';

var canvas = new fabric.Canvas('canvas');

var pugImg = new Image();
pugImg.onload = function (img)     
    var pug = new fabric.Image(pugImg, 
        angle: 45,
        width: 500,
        height: 500,
        left: 50,
        top: 70,
        scaleX: .25,
        scaleY: .25
    );
    canvas.add(pug);
;
pugImg.src = imgURL;
#canvas 
    box-shadow: 0 0 5px 1px black;
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.1.0/fabric.all.min.js"></script>
<canvas id="canvas"  ></canvas>

如您所见,我的照片未满。 请帮我找出问题所在。 谢谢。

【问题讨论】:

【参考方案1】:

widthheight 属性实际上并不打算被它使用。它们用于设置应显示原始图像的像素数。大于原始图像尺寸的值意味着更大的容器,较小的值会导致裁剪。

不要直接设置宽度、高度、scaleX 和 scaleY 值,而是使用这两种方法来设置图像大小:

image.scaleToWidth(desiredWidth);

image.scaleToHeight(desiredWidth);

如果您有特定的尺寸并且不介意拉伸图像,您也可以这样做:

image.set(
  'scaleX': desiredWidth / image.width,
  'scaleY': desiredHeight / image.height
);

【讨论】:

非常感谢您。它工作但当我使用 scaleToWidth 然后 scaleToHeight 不工作。它们如何协同工作? 您打算使用其中一个。当您使用 scaleToWidth 时,图像的高度将更改为该宽高比的正确高度,反之亦然,使用 scaleToHeight 我想两者都用。因为我的目的是用给定的长度和宽度重新绘制图像。期待您的来信 您不需要同时使用两者来获得您想要的尺寸。只需使用其中之一来设置正确的scaleXscaleY 值。然后根据需要调整heightwidth 值。 感谢您耐心回答我的问题。我试着按照你的回答。这是正确的,但我的意思是我有 scaleX 和 scaleY 。将图像添加到画布后(使用 scaleToHeight ,这是正确的),但宽度会随着图像宽度溢出。我希望图像始终在给定的 scaleX 和 Y 中绘制,接受带有失真的图像。

以上是关于将图像添加到画布,但高度和宽度不符合要求的主要内容,如果未能解决你的问题,请参考以下文章

位图/画布:java.lang.IllegalArgumentException:宽度和高度必须 > 0

PHP imagecopy 函数根据主图像的高度和宽度改变图章大小

更改画布宽度/高度时,将重置画布上下文

如何在没有溢出的情况下将画布的宽度和高度设置为浏览器的所有高度和宽度?

将图像重新调整为新的高度和宽度,但不要超过原始高度和宽度

裁剪画布/导出具有特定宽度和高度的 html5 画布