sammycage / plutosvg

Tiny SVG rendering library in C
MIT License
247 stars 17 forks source link
c emoji2png freetype otfsvg plutovg svg svg-hooks svg2png

emoji-collection.png

PlutoSVG

PlutoSVG is a compact and efficient SVG rendering library in C, designed for parsing and rendering SVG documents embedded in OpenType fonts. It is optimized for speed and minimal memory usage. It supports all elements specified in the OpenType SVG specifications except clipPath. It also supports the CSS var() function for referencing colors defined in the CPAL table as custom properties. Additionally, it supports the style attribute, the CSS inherit keyword, and the <symbol> element. This ensures compatibility with most SVG files exported from popular vector editors such as Illustrator, Sketch, Inkscape, Xara, and Corel Draw.

Basic Usage

#include <plutosvg.h>

#include <stdio.h>

int main(void)
{
    plutosvg_document_t* document = plutosvg_document_load_from_file("camera.svg", -1, -1);
    if(document == NULL) {
        printf("Unable to load: camera.svg\n");
        return -1;
    }

    plutovg_surface_t* surface = plutosvg_document_render_to_surface(document, NULL, -1, -1, NULL, NULL, NULL);
    plutovg_surface_write_to_png(surface, "camera.png");
    plutosvg_document_destroy(document);
    plutovg_surface_destroy(surface);
    return 0;
}

camera.png

Integrating with FreeType

#include <plutosvg.h>

#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_MODULE_H

int main(void)
{
    FT_Library library;

    // Initialize the FreeType library
    if(FT_Init_FreeType(&library)) {
        // Handle error
        return -1;
    }

    // Set PlutoSVG hooks for the SVG module
    if(FT_Property_Set(library, "ot-svg", "svg-hooks", plutosvg_ft_svg_hooks())) {
        // Handle error
        return -1;
    }

    // Your code here

    // Clean up
    FT_Done_FreeType(library);
    return 0;
}

Installation

Follow the steps below to install PlutoSVG using either Meson or CMake.

Using Meson

git clone https://github.com/sammycage/plutosvg.git
cd plutosvg
meson setup build
ninja -C build install

Using CMake

git clone https://github.com/sammycage/plutosvg.git
cd plutosvg
cmake -B build .
make -C build -j2
make -C build install