当前位置: 首页 > 知识库问答 >
问题:

如何创建一个径向渐变使用Fabric.js

韩善
2023-03-14

对于最新的布料(4.1),我似乎找不到一个很好的例子,在整个画布上或在一个对象(如矩形)上设置径向渐变。

我对线性渐变没有问题,但是让径向定位正确(我只想在中心)却让我捉摸不透。这是我尝试过的代码。

JS:

let canvas = new fabric.Canvas("c", {
    isDrawingMode: false
});

let colorStops; 
let angle = 180;

const shapeColorStops = {};
var anglePI = (-parseInt(angle, 10)) * (Math.PI / 180);

const setBackgroundGradient = (e) => {
    let coords;
    let type = e.target.id;

    if (type == 'radial') {
        console.log('trying to set radial gradient')
        coords = {
            r1: canvas.width/2,
            r2: 0,
            x1: canvas.width/2,
            y1: canvas.height/2,
          //  x2: 0,
          //  y2: 0
        }
    }
    else {
        console.log('trying to set linear gradient')
        coords = {
            x1: (Math.round(50 + Math.sin(anglePI) * 50) * canvas.width) / 100,
            y1: (Math.round(50 + Math.cos(anglePI) * 50) * canvas.height) / 100,
            x2: (Math.round(50 + Math.sin(anglePI + Math.PI) * 50) * canvas.width) / 100,
            y2: (Math.round(50 + Math.cos(anglePI + Math.PI) * 50) * canvas.height) / 100,
        }
    }
    var grad = new fabric.Gradient({
        type: type,
        coords: coords,
        colorStops: [
        {
            color: 'rgb(166,111,213)',
            offset: 0,
        },
        {    
            color: '#200772',
            offset: 1,
        }
        ]});
    canvas.setBackgroundColor(grad);
    canvas.renderAll();
}

共有1个答案

焦宁
2023-03-14

在阅读了画布渐变的规范之后,我能够想出正确的设置来设置画布和对象的径向渐变。更新的代码笔在这里。

下面是使径向梯度工作的部分:

    if (!el) el =  canvas;
    let coords;
    let size = {width: el.width, height: el.height}
    let num = size.height/2;
    let radius = num + size.width/4;

    
    if (type == 'radial') {
        console.log('trying to set radial gradient, size is '+JSON.stringify(size))
       // the numbers for my canvas are  width="1920" height="1080"
        coords = {
        r1: radius,
        r2: size.width *.05,
       
        x1: size.width/2,
        y1: size.height/2,
        
        x2: size.width/2,
        y2: size.height/2
        }
    }
 类似资料:
  • 我试图创建一个带有径向渐变的按钮,但每次我加载应用程序时,它都会崩溃。 mylayout.xml: 我的按钮。xml: 下面是错误日志。我的目标是Android SDK 22。 致命的例外:主java。lang.RuntimeException:无法启动活动组件信息{com.my.app/com.my.app.MyActivity}:android。看法充气异常:二进制XML文件行#324:在an

  • 我想创建一个模拟光的圆,我需要一个径向梯度。我希望它的中心是黄色的,外侧是透明的。 我试过了,但没有达到预期的效果。

  • 问题内容: 我试图以编程方式重现以下渐变。 如何以编程方式设置参数?谢谢 问题答案: http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html 要设置该特定参数(我假设您没有指定一个centerX值): 因此,以编程方式创建上述渐变(不同颜色除外): 注意:对于径向渐变,方向将被忽略

  • 我需要设置一个最小的Gradle 不提供任何Android选项。 我应该如何为Android创建一个最小的可编译项目? 这里的答案已经过时,对我没有任何帮助。

  • 我需要生成一个梯度位图,显示彩虹渐变之间的两种颜色,这是由用户选择的。生成彩虹很容易。下面的代码是我从Wiki获得的,并对其进行了稍微的修改。它具有快速、简单的优点。 这个算法的问题是它不能在两种颜色之间显示部分彩虹。嗯,当然可以,但你必须接近每种颜色的分数,我不喜欢这样的解决方案。我试着把颜色分解成r、g、b通道,但这不起作用。事后看来,原因相当明显。假设您需要在FF0000和0000ff之间的

  • 在 Adobe XD 中创建、编辑、导入、使用渐变。使用“渐变”面板添加色标并控制渐变不透明度。 渐变是两个或多个颜色或者同一颜色或不同颜色的两个或多个色调之间的渐变混合。您可以使用渐变来创建颜色混合,向矢量对象添加卷,并在设计中添加光影效果。 XD 支持线性和径向渐变。 线性渐变 XD 以直线从起点渐变到终点。 径向渐变 XD 以圆形图案从起点渐变到终点。 渐变拾色器 要访问 XD 中的渐变拾色