Oh MyUtils

SVG Blob 生成器 - 在线创建有机Blob形状

为现代网页设计创建随机有机SVG Blob形状

常见问题

什么是SVG Blob生成器?

SVG Blob生成器是一种工具,用于创建SVG(可缩放矢量图形)格式的随机有机形状(称为blob)。这些形状通过在圆周围分布随机点并用平滑曲线连接来数学生成。由于其柔和的有机外观,blob在现代网页设计中被广泛用于背景、英雄区域、卡片装饰和品牌元素。

如何使用这个SVG Blob生成器?

1. 调整复杂度滑块控制blob的曲线数量。2. 调整随机性滑块控制形状的不规则程度。3. 设置SVG viewBox大小。4. 选择填充类型(纯色或渐变)并选择颜色。5. 点击随机生成按钮生成不同的blob变体。6. 找到喜欢的形状后,复制SVG代码或下载SVG/PNG文件。

我的设计数据安全吗?会发送到服务器吗?

您的设计数据100%安全,永远不会离开您的浏览器。所有blob生成都使用JavaScript数学算法在客户端执行。没有任何数据传输到任何服务器。这使得该工具对于专有品牌工作和机密设计项目都是安全的。

复杂度和随机性有什么区别?

复杂度控制生成blob所用的控制点数量。更多的点创建具有更多曲线和细节的形状,而更少的点创建更简单、更圆的形状。随机性控制每个点偏离完美圆形的程度。低随机性产生几乎圆形的形状,而高随机性创建不规则的有机形态。

我可以在网页项目中使用生成的SVG吗?

是的,生成的SVG代码可以直接用于任何网页项目。您可以将其内联嵌入HTML中,用作React/Vue组件,作为外部SVG文件引用,或通过data URI用作CSS background-image。SVG符合标准,在所有现代浏览器中都能正常工作。

SVG blob在网页设计中的常见用途是什么?

SVG blob常用于:英雄区域背景、卡片和容器装饰、图像蒙版和裁剪路径、加载动画、标志和品牌元素、区域分隔线、浮动装饰元素和渐变背景。其有机形状为矩形为主的网页布局增添了视觉趣味和现代感。

为什么使用SVG格式而不是PNG或JPEG来制作blob?

SVG提供多项优势:无质量损失的无限缩放、与光栅图像相比更小的文件大小、通过代码轻松自定义颜色、CSS/JS动画支持、默认透明背景,以及由于是基于文本的标记而对SEO友好。SVG blob在任何屏幕尺寸或分辨率下都保持清晰。

代码示例

// Generate an organic SVG blob shape in JavaScript

// Seeded random number generator (Mulberry32)
function createSeededRandom(seed) {
    return function () {
        seed |= 0;
        seed = (seed + 0x6d2b79f5) | 0;
        let t = Math.imul(seed ^ (seed >>> 15), 1 | seed);
        t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
        return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
    };
}

// Generate blob points using polar coordinates with random deviation
function generateBlobPoints(numPoints, radius, randomness, seed) {
    const rng = createSeededRandom(seed);
    const points = [];
    const angleStep = (Math.PI * 2) / numPoints;

    for (let i = 0; i < numPoints; i++) {
        const theta = i * angleStep;
        const deviation = 1 + (rng() - 0.5) * (randomness / 50);
        const r = radius * deviation;
        points.push({
            x: Math.cos(theta) * r,
            y: Math.sin(theta) * r,
        });
    }
    return points;
}

// Convert points to smooth SVG path using Catmull-Rom spline
function pointsToSvgPath(points, center) {
    const n = points.length;
    let d = `M ${points[0].x + center} ${points[0].y + center}`;

    for (let i = 0; i < n; i++) {
        const p0 = points[(i - 1 + n) % n];
        const p1 = points[i];
        const p2 = points[(i + 1) % n];
        const p3 = points[(i + 2) % n];

        const cp1x = p1.x + (p2.x - p0.x) / 6;
        const cp1y = p1.y + (p2.y - p0.y) / 6;
        const cp2x = p2.x - (p3.x - p1.x) / 6;
        const cp2y = p2.y - (p3.y - p1.y) / 6;

        d += ` C ${cp1x + center} ${cp1y + center}, ${cp2x + center} ${cp2y + center}, ${p2.x + center} ${p2.y + center}`;
    }
    return d + " Z";
}

// Generate complete SVG string
function generateBlobSvg(options = {}) {
    const {
        seed = Math.floor(Math.random() * 100000),
        complexity = 8,
        randomness = 50,
        size = 400,
        color = "#6366f1",
    } = options;

    const center = size / 2;
    const radius = size * 0.35;
    const points = generateBlobPoints(complexity, radius, randomness, seed);
    const path = pointsToSvgPath(points, center);

    return `<svg viewBox="0 0 ${size} ${size}" xmlns="http://www.w3.org/2000/svg">
  <path d="${path}" fill="${color}" />
</svg>`;
}

// Usage
const svg = generateBlobSvg({
    seed: 42,
    complexity: 10,
    randomness: 60,
    size: 400,
    color: "#8b5cf6",
});
console.log(svg);
document.getElementById("blob-container").innerHTML = svg;

相关工具