简体   繁体   English

Fabric.js Resize 对象无法正常工作

[英]Fabric.js Resize object not working properly

I am unable to resize object I am using two inputs from where I get new width and height and the use that input value as new height and with for Active Object and object container is resizing but content is not.我无法调整对象大小我使用两个输入,从那里我获得新的宽度和高度,并使用该输入值作为新高度,用于活动对象和对象容器正在调整大小但内容不是。

 (function() { var canvas = this.__canvas = new fabric.Canvas('canvas'); var imgURL = 'http://i.imgur.com/8rmMZI3.jpg'; // create a rectangle with a fill and a different color stroke var pugImg = new Image(); pugImg.onload = function (img) { var pug = new fabric.Image(pugImg, { width: 500, height: 500, left: 50, top: 70, scaleX: .25, scaleY: .25 }); canvas.add(pug); }; pugImg.src = imgURL; canvas.renderAll(); $('#objSetterWidth, #objSetterHeight').bind('input', function() { o = canvas.getActiveObject(); w = $('#objSetterWidth').val(); h = $('#objSetterHeight').val(); o.width = w / o.scaleX o.height = h / o.scaleY o.setCoords(); canvas.renderAll(); }); })();
 <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.3/fabric.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-group col-md-6"> <input type="number" class="form-control form-control-sm" placeholder="Width" id="objSetterWidth"> </div> <div class="form-group col-md-6"> <input type="number" class="form-control form-control-sm" placeholder="Height" id="objSetterHeight"> </div> <canvas id="canvas" width="800" height="600"></canvas>

This is what width / height do - they don't resize the original image but rather resize the container, effectively 'cropping' the original image.这就是width / height所做的 - 他们不会调整原始图像的大小,而是调整容器的大小,有效地“裁剪”原始图像。 What you want to do is let fabric set the width and height according to the image's original dimensions and scale the object - this way you'll affect both image container and the image itself.您想要做的是让fabric 根据图像的原始尺寸设置widthheight并缩放对象 - 这样您将影响图像容器和图像本身。 You also don't need to pass width and height into Image constructor.您也不需要将widthheight传递给Image构造函数。 If you want to add an image and scale to a particular size right away, use scaleToWidth() or scaleToHeight() .如果您想立即添加图像并缩放到特定大小,请使用scaleToWidth()scaleToHeight()

Anyway, here's the code to resize the image via inputs:无论如何,这是通过输入调整图像大小的代码:

 (function() { var canvas = this.__canvas = new fabric.Canvas('canvas'); var imgURL = 'http://i.imgur.com/8rmMZI3.jpg'; // create a rectangle with a fill and a different color stroke var pugImg = new Image(); pugImg.onload = function (img) { var pug = new fabric.Image(pugImg, { //width: 500, //- you don't need this unless you want to 'crop' //height: 500, //- you don't need this unless you want to 'crop' left: 50, top: 70, scaleX: .25, scaleY: .25 }); canvas.add(pug); canvas.renderAll(); }; pugImg.src = imgURL; $('#objSetterWidth, #objSetterHeight').bind('input', function() { var o = canvas.getActiveObject(); // if no object selected, do nothing if (!o) { return } var w = $('#objSetterWidth').val(); var h = $('#objSetterHeight').val(); // get the original image dimensions var originalW = o.getOriginalSize().width; var originalH = o.getOriginalSize().height; // if w input is empty, don't scale width if (w) { o.set('scaleX', w / originalW); } // if h input is empty, don't scale height if (h) { o.set('scaleY', h / originalH); } o.setCoords(); canvas.renderAll(); }); })();
 <script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.4.3/fabric.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-group col-md-6"> <input type="number" class="form-control form-control-sm" placeholder="Width" id="objSetterWidth"> </div> <div class="form-group col-md-6"> <input type="number" class="form-control form-control-sm" placeholder="Height" id="objSetterHeight"> </div> <canvas id="canvas" width="800" height="600"></canvas>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM