🎨

Rustで画像に文字を描画する

2021/08/19に公開

モチベ

Rustで画像に文字を描画してみたい。RustでOGPを生成できたら面白そう。

クレート

[dependencies]
image = "0.23.14"
imageproc = "0.22.0"
rusttype = "0.9.2"

使用フォント: Dela Gothic One - Google Fonts

方針

フォントを扱うクレートのrusttypeで描画しようと思ったが、若干低レイヤーだったので、imageproc::drawing::draw_text_mutを使って描画することにした。

コード

use image::Rgba;
use imageproc::drawing::draw_text_mut;
use rusttype::{Font, Scale};

fn main() {
    let mut image = image::open("assets/image/bg1.jpg").unwrap();
    let font = Vec::from(include_bytes!("../assets/fonts/DelaGothicOne-Regular.ttf") as &[u8]);
    let font = Font::try_from_vec(font).unwrap();

    let height = 300.0;
    let scale = Scale {
        x: height,
        y: height,
    };

    let text = "すごい副業";
    draw_text_mut(&mut image, Rgba([255u8, 255u8, 255u8, 255u8]), 50, 0, scale, &font, text);

    image.save("test.jpg").unwrap();
}

結果、次のような画像が生成される

学び

  • rusttypeのメンテが止まっている
  • 自動改行できないので、サクッとやりたい場合は2Dのグラフィックライブラリーを使ったほうがよさそう

Discussion