'FabricJS - remove Stroke from image intended for saving

I have the following code for rounding corners of an image:

$scope.startRoundedCorners = function(e) {
    if ($rootScope.activePanel === 'round') return;

    $rootScope.openPanel('round', e);

    $scope.rect = new fabric.Rect({
        width: canvas.original.width,
        height: canvas.original.height,
        rx: $scope.radius,
        ry: $scope.radius,
        opacity: 1,
        fill: 'transparent',
        name: 'rounding-rect',
        stroke: '#fff',
        strokeDashArray: [5, 5],
        selectable: false,
        evented: false,
        ignore: true,
    });

    canvas.fabric.add($scope.rect);
    canvas.fabric.renderAll();
};

$scope.adjustPreview = function() {
    if ( ! $scope.rect) return;

    $scope.rect.set({
        rx: $scope.radius, ry: $scope.radius
    });
    canvas.fabric.renderAll();
};

$scope.apply = function() {
    $rootScope.editorCustomActions.roundCorners = angular.copy($scope.radius);

    canvas.fabric.remove($scope.rect);
    canvas.zoom(1);

    canvas.fabric.clipTo = function(ctx) {
        $scope.rect.render(ctx);
        canvas.fabric.clipTo = false;
    };
    var data = canvas.fabric.toDataURL(); //canvas.getDataURL();
    canvas.fabric.clear();
    $scope.cancel();

The problem is that the defined stroke is rendered also to the final image. I would like to remove the stroke before saving and the stroke have just for preview. I have tried to add $scope.rect.setStrokeWidth(0); at the beginning of the Apply function, but no effect.

Is there any way to remove all "user indicators" from the image and save only a pure image without all the additional strokes?



Solution 1:[1]

Did you try the following:

canvas.fabric.deactivateAll().renderAll();

Solution 2:[2]

Add line

$scope.rect.setStrokeWidth(0);

before line

var data = canvas.fabric.toDataURL();

This simply sets the stroke's width to 0 px right before saving the image.

Solution 3:[3]

You could try:

this.fc.remove(...this.fc.getObjects('rect').filter((r) => r.name === 'rounding-rect'));

this.fc is the fabric.Canvas. Remove the specific rectangles before saving.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 shershen
Solution 2 nfsmaniac
Solution 3 Garry Xiao