40 个版本

0.8.4 2024年4月11日
0.8.3 2023年9月15日
0.8.2 2023年1月19日
0.8.1 2022年7月22日
0.6.1 2019年7月23日

#19 in 图像

Download history 2237/week @ 2024-04-26 2394/week @ 2024-05-03 2129/week @ 2024-05-10 2288/week @ 2024-05-17 1927/week @ 2024-05-24 1863/week @ 2024-05-31 1561/week @ 2024-06-07 3175/week @ 2024-06-14 2109/week @ 2024-06-21 1903/week @ 2024-06-28 2287/week @ 2024-07-05 1982/week @ 2024-07-12 1879/week @ 2024-07-19 2087/week @ 2024-07-26 2456/week @ 2024-08-02 3266/week @ 2024-08-09

9,976 每月下载量
用于 35 个crate (20 直接)

BSD-3-Clause

160KB
3.5K SLoC

raqote

Build Status crates.io Documentation

一个纯Rust 2D 图形库。

Raqote 是一个小型、简单、快速的 2D 图形库。

当前功能

  • 路径填充
  • 描边
  • 虚线
  • 图像、纯色和渐变填充
  • 矩形和路径裁剪
  • 混合模式
  • 图层
  • 图像重复模式
  • 全局透明度

知名用户

  • resvg 支持使用 raqote 作为后端。
  • Servo 使用 raqote 作为其画布后端。
  • orbtk 使用 raqote。

示例

一个简单的示例:在窗口中绘制

以下是一个绘制到 png 的示例

use raqote::*;

let mut dt = DrawTarget::new(400, 400);

let mut pb = PathBuilder::new();
pb.move_to(100., 10.);
pb.cubic_to(150., 40., 175., 0., 200., 10.);
pb.quad_to(120., 100., 80., 200.);
pb.quad_to(150., 180., 300., 300.);
pb.close();
let path = pb.finish();

let gradient = Source::new_radial_gradient(
    Gradient {
        stops: vec![
            GradientStop {
                position: 0.2,
                color: Color::new(0xff, 0, 0xff, 0),
            },
            GradientStop {
                position: 0.8,
                color: Color::new(0xff, 0xff, 0xff, 0xff),
            },
            GradientStop {
                position: 1.,
                color: Color::new(0xff, 0xff, 0, 0xff),
            },
        ],
    },
    Point::new(150., 150.),
    128.,
    Spread::Pad,
);
dt.fill(&path, &gradient, &DrawOptions::new());

let mut pb = PathBuilder::new();
pb.move_to(100., 100.);
pb.line_to(300., 300.);
pb.line_to(200., 300.);
let path = pb.finish();

dt.stroke(
    &path,
    &Source::Solid(SolidSource {
        r: 0x0,
        g: 0x0,
        b: 0x80,
        a: 0x80,
    }),
    &StrokeStyle {
        cap: LineCap::Round,
        join: LineJoin::Round,
        width: 10.,
        miter_limit: 2.,
        dash_array: vec![10., 18.],
        dash_offset: 16.,
    },
    &DrawOptions::new()
);

dt.write_png("example.png");

生成

example.png

依赖关系

~2–12MB
~121K SLoC