Fabric.js - 更改矩形填充

Posted

技术标签:

【中文标题】Fabric.js - 更改矩形填充【英文标题】:Fabric.js - Change Rectangle Fill 【发布时间】:2012-09-03 14:28:42 【问题描述】:

我正在开发一个使用 Fabric.js 的应用程序。

我需要能够更改作为背景放置的矩形填充

我使用canvas.getActiveObject() 来更改矩形的填充。不幸的是,我似乎找不到改变矩形填充的方法。

这是我的代码:

<html>
  <head>
    <title>Text Rendering Example</title>
    <script src="fabric.js"></script>  
    <script src="canvas2image.js"></script>
    <script src="base64.js"></script>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
    
  </head>
  <body>
    <canvas id="canvas"   style="border:1px solid #000000"></canvas>
    
    
    
    <form name = "boxForm" onsubmit="addBox()">
        Width: <input type="text" name="firstname" /><br />
        Text: <input id="text-control" type="text" name="textString" />
        Text Color: <input id="text-color" type="text" value = "#FF0000" name="textColor" />
        Background Color: <input id="background-color" type="text" value = "#333333" name="backgroundColor" />
    </form> 
    
    <button onclick="addBox()">Background</button>
    
    <button onclick="addText()">Add Text</button>
    
    <!--button onclick="updateControls()">Edit Text</button-->
    
    <button onclick="saveImage()">File</button>

    <script type="text/javascript" >
    
        var canvas = new fabric.Canvas('canvas');       
        
        var $ = function(id)return document.getElementById(id);
      
        var textArray = new Array();
        
        var textControl = $('text-control');        
        var textColor = $('text-color');
        var backgroundColor = $('background-color');
      
        function addBox()
               
            var rect = new fabric.Rect(
            width: 1000,
            height: 600,
            top: 300,
            left: 500,
            fill: 'rgba(51,51,51,1)',
            draggable: false
            );
            rect.lockMovementX = true;
            rect.lockMovementY = true; 
            rect.lockUniScaling = true; 
            rect.lockRotation = true; 

            canvas.add(rect);
        

        function addText()
        
            var content = document.boxForm.textString.value;
            var color = document.boxForm.textColor.value;
            
            text = new fabric.Text(content,                
                left: 100, 
                top: 100,
                fill: color
            );
            text.lockUniScaling = true; 
            text.lockRotation = true;

            //textArrayAdd(text);   
                
            canvas.add(text);
        
        
        textControl.onchange = function() 
            canvas.getActiveObject().setText(this.value);
            canvas.renderAll();
        ;
        
        textColor.onchange = function() 
            canvas.getActiveObject().setColor(this.value);
            canvas.renderAll();
        ;
        
        /*----This is where I change the color of the Rectangle-----*/

        backgroundColor.onchange = function()          
            canvas.getActiveObject().fillRect( 20, 100, 100, 50 );
            canvas.renderAll();
        ;

        /*----This is where I change the color of the Rectangle-----*/

        
        /*function textArrayAdd(obj)
        
            textArray.push(obj);
        */
        
        function updateControls()          
            textControl.value = canvas.getActiveObject().getText();
        
        
        canvas.on(
            'object:selected': updateControls,
        );
                
        /*var strDataURI = canvas.toDataURL('image/png'); 
        
        function saveImage()
                   
            Canvas2Image.saveAsPNG(canvas); 
        */
        
        
    </script>
    
  </body>
</html>

关于如何改变它的任何想法?提前致谢!

【问题讨论】:

【参考方案1】:

使用fabric的基本设置方法解决了这个问题:

backgroundColor.onchange = function()          
    canvas.getActiveObject().set("fill", this.value);
    canvas.renderAll();
;

【讨论】:

【参考方案2】:

通过 fabrics 文档编写这个简单易用的代码

var activeObject = canvas.getActiveObject();
        activeObject.fill = 'your color code value';
        canvas.renderAll();

【讨论】:

【参考方案3】:
 function addBox()
               
            var rect = new fabric.Rect(
            width: 1000,
            height: 600,
            top: 300,
            left: 500,
            fill: ' ',
            draggable: false
            );
            rect.lockMovementX = true;
            rect.lockMovementY = true; 
            rect.lockUniScaling = true; 
            rect.lockRotation = true; 

            canvas.add(rect);
        

make your fill null and if you want to have a border 
use strokeWidth: 3, stroke: "color"

【讨论】:

以上是关于Fabric.js - 更改矩形填充的主要内容,如果未能解决你的问题,请参考以下文章

Fabric.js - 带有免费矩形边界框的文本,如 Google 幻灯片

Fabric JS 2.4.1 ClipPath Crop 不适用于动态创建的矩形蒙版

Fabric.js Canvas - 使一种对象始终位于另一种对象下方

Fabric.js 将画布(或对象组)剪辑到多边形

Fabric.JS 与 Node.JS - 导出为 PNG/JPEG

Fabric.js 实现文本自动换行