Image Resize / Scale

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.0.1/fabric.min.js"></script>
<img id="image" />
<canvas id="paper" width="400" height="400" style="border:1px solid #ccc"></canvas>
<button id="zoomIn">[+]</button>
<button id="zoomOut">[-]</button>

SCSS

#paper {
  border: solid 1px red;
}

JavaScript

const canvas = new fabric.Canvas('paper');
const canvasOriginalSize = {
	width: 600,
  height: 600
};
const step = .1;
const page = new fabric.Rect({
    left: 50,
    top: 50,
    width: 300,
    height: 300
});

let zoomFactor = 1;

canvas.add(page);
canvas.renderAll();

function setPattern(scaleFactor){
	const imgSrc = ['https://picsum.photos/', page.get('width') * scaleFactor,'/',  page.get('height') * scaleFactor].join('');

$('#image').attr('src', imgSrc);

fabric.Image.fromURL(imgSrc, function(img) {
    const patternSourceCanvas = new fabric.StaticCanvas();
    img.scaleToWidth(300);
    img.scaleToHeight(300);
 //patternSourceCanvas.enableRetinaScaling = true;
  // patternSourceCanvas.imageSmoothingEnabled = true;
   //patternSourceCanvas.backgroundVpt = false;

   patternSourceCanvas.setBackgroundColor('red', patternSourceCanvas.renderAll.bind(patternSourceCanvas));
    patternSourceCanvas.setBackgroundImage(img, patternSourceCanvas.renderAll.bind(patternSourceCanvas));

    const pattern = new fabric.Pattern({
      source: function () {
        patternSourceCanvas.setDimensions({
          width: 300,
          height: 300
        });
        patternSourceCanvas.renderAll();
        return patternSourceCanvas.getElement();
      },
      repeat: 'no-repeat'
    });

    page.setPatternFill(pattern);
    page.
  }.bind(this),{crossOrigin: 'Anonymous'});
        
}

zoom();

function zoom(scaleFactor = 1) {

//	canvas.setHeight(canvas.getHeight() * scaleFactor);
  // canvas.setWidth(canvas.getWidth() * scaleFactor);
//	canvas.setViewportTransform([scaleFactor, 0, 0, scaleFactor, 0,0]);
//canvas.setZoom(scaleFactor);

const vpt = canvas.viewportTransform;
        vpt[0] = scaleFactor;
        vpt[3] = scaleFactor;
//        vpt[4] = canvasShifter.left;
  //      vpt[5] = canvasShifter.top;
canvas.setViewportTransform(vpt);
	setPattern(scaleFactor);
  canvas.renderAll();
}
        
$('#zoomIn').on('click', function(){
	zoomFactor +=...