Перейти к содержанию

Использование Resvg в Rust - Подробное руководство

Posted on:4 мая 2023 г. at 10:56

Example Dynamic OG Image link В этой статье мы рассмотрим Resvg, библиотеку рендеринга Rust SVG, и узнаем, как эффективно использовать ее в проекте Rust. Масштабируемая векторная графика (SVG) - это широко используемый формат векторных изображений на основе XML для создания двумерной графики с поддержкой интерактивности и анимации.

Resvg - это высококачественная библиотека, целью которой является обеспечение эффективного и точного рендеринга SVG-файлов. Это идеальный выбор для разработчиков, которые хотят включить поддержку SVG в свои проекты Rust.

Для начала

Чтобы следовать этому руководству, вам понадобится:

  1. Базовое понимание языка программирования Rust
  2. Rust и cargo, установленные в вашей системе

Введение

Чтобы начать использовать Resvg в вашем проекте Rust, вам необходимо добавить его в качестве зависимости в ваш файл Cargo.toml:

[dependencies]
resvg = "0.19.0"

Теперь давайте импортируем необходимые модули в наш main.rs файл:

use resvg::{prelude::*, usvg};

Загрузка SVG-файла

Чтобы загрузить SVG-файл, мы используем функцию usvg::Tree::from_file. Он принимает путь к файлу в качестве аргумента и возвращает результат<usvg::Tree, usvg::Error>. Ниже приведен пример того, как загрузить SVG-файл:

use resvg::Image;

fn render_svg(tree: &usvg::Tree, options: &resvg::Options) -> Result<Image, resvg::Error> {
    let image = resvg::render(&tree, usvg::FitTo::Original, options)?;
    Ok(image)
}

Сохранение отрисованного изображения

После рендеринга SVG-изображения мы можем сохранить его в виде PNG-файла, используя метод resvg::Image::save_png. Этот метод принимает ссылку на путь к файлу в качестве своего аргумента и возвращает результат<(), std::io::Error>. Вот пример того, как сохранить отрисованное изображение:

fn save_image(image: &Image, output_path: &str) -> Result<(), std::io::Error> {
    image.save_png(output_path)
}

Собирая все это воедино

Теперь мы можем объединить все функции для загрузки, рендеринга и сохранения SVG-файла в виде PNG-изображения:

use resvg::{prelude::*, usvg};
use resvg::Image;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
    let input_file = "assets/example.svg";
    let output_file = "output/example.png";

    let tree = load_svg(input_file)?;
    let options = resvg::Options::default();
    let image = render_svg(&tree, &options)?;

    save_image(&image, output_file)?;

    println!("SVG file successfully converted to PNG!");
    Ok(())
}

fn load_svg(file_path: &str) -> Result<usvg::Tree, usvg::Error> {
    let tree = usvg::Tree::from_file(file_path, &usvg::Options::default())?;
    Ok(tree)
}

fn render_svg(tree: &usvg::Tree, options: &resvg::Options) -> Result<Image, resvg::Error> {
    let image = resvg::render(&tree, usvg::FitTo::Original, options)?;
    Ok(image)
}

fn save_image(image: &Image, output_path: &str) -> Result<(), std::io::Error> {
    image.save_png(output_path)
}

В этом руководстве мы обсудили, как использовать библиотеку Resvg в проекте Rust, включая загрузку и рендеринг SVG-файлов, а также сохранение отрисованного изображения в формате PNG. Resvg - это мощная и гибкая библиотека, которая поможет вам с легкостью внедрить поддержку SVG в ваши приложения Rust.