Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/keiya01/og_image_writer

Generate Open Graphic Image with CSS-like API.
https://github.com/keiya01/og_image_writer

css html ogp-image rust wasm web webassembly

Last synced: 12 days ago
JSON representation

Generate Open Graphic Image with CSS-like API.

Awesome Lists containing this project

README

        

# Open Graphic Image Writer

[Documentation](https://crates.io/crates/og_image_writer)

You can generate Open Graphic Image dynamically.

- A CSS-like API.
- You can generate image by using template image.
- WASM/WASI support.

## Problem

Currently, when you want to create OGP image dynamically, you may use canvas. But to use canvas, you need to open a browser and run some script.
This has overhead for memory usage and rendering performance.
Therefore this lib is targeting a high performance API for all platform(including the edge) by using wasm.

## Example

For more examples, see [keiya01/og_image_writer/examples](https://github.com/keiya01/og_image_writer/tree/main/examples).

```rust
use og_image_writer::{style, writer::OGImageWriter};
use std::path::Path;

fn main() -> anyhow::Result<()> {
let text = "This is Open Graphic Image Writer for Web Developer.";

let mut writer = OGImageWriter::new(style::WindowStyle {
width: 1024,
height: 512,
background_color: Some(style::Rgba([70, 40, 90, 255])),
align_items: style::AlignItems::Center,
justify_content: style::JustifyContent::Center,
..style::WindowStyle::default()
})?;

let font = Vec::from(include_bytes!("../fonts/Mplus1-Black.ttf") as &[u8]);

writer.set_text(
text,
style::Style {
margin: style::Margin(0, 20, 0, 20),
line_height: 1.8,
font_size: 100.,
word_break: style::WordBreak::Normal,
color: style::Rgba([255, 255, 255, 255]),
text_align: style::TextAlign::Start,
..style::Style::default()
},
font,
)?;

let out_dir = "./examples";
let out_filename = "output_background_color.png";

writer.generate(Path::new(&format!("{}/{}", out_dir, out_filename)))?;

Ok(())
}
```

When you pass the following the template image,

![example template image](https://raw.githubusercontent.com/keiya01/og_image_writer/main/assets/og_template.png)

this code generate the following image.

![example output image](https://raw.githubusercontent.com/keiya01/og_image_writer/main/dev/snapshots/output_background_image.png)

And you can also set `background-color` instead of passing the template image.

For more complex examples, see [keiya01/og_image_writer/examples](https://github.com/keiya01/og_image_writer/tree/main/examples).