🎨
Rustで画像に文字を描画する
モチベ
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