Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Rust で画像のリサイズをやってみたメモ(サムネイルを作るやつ)

Rust で画像のリサイズ(ほとんどの場合縮小だと思うけど)をやってみたメモ。

Cargo.toml
[dependencies]
image = "0.24.2"
main.rs
use image::GenericImageView;
use image::imageops::FilterType;

fn main() {
    let img = image::open("original.png").unwrap();

    let nwidth: u32 = 500; // thumbnail width
    let nheight: u32 = img.height();

    let resized_img = img.resize(nwidth, nheight, FilterType::Lanczos3);

    resized_img.save("resized.png").unwrap();
}
  • リサイズ後の幅と高さは、画像を縮小させる場合、幅と高さの小さい方に引っ張られるので、正確でない方の辺は適当でも大丈夫なようだ
  • 上の例だと幅を決め打ちにしたいので、高さは適当でよい
  • もちろん小さくしすぎたらそっちに引っ張られてしまうので、雑に、今の高さを入れてみた


image の README には、

Note that some of the functions are very slow in debug mode. Make sure to use release mode if you experience any performance issues.

とあり、この resize() が「一部の関数」にあたるのかはわからないが、オリジナルの画像が大きいとめちゃくちゃ遅かった(4500x4500 を 1000x 1000 にするのに 40 秒かかった)が、リリース用のビルドをして、exe を実行したらめちゃくちゃ早くなった(0.6 秒)。

参考: