なぜこの記事を書こうと思ったのか
普段、CodiMDやNotionをよく使うのですが、クリップボードにコピーした画像を小さくして貼り付けたい場面がよくありました。
Photoshopやペイントを起動して小さくするのも面倒だったので、ツールを実行するとクリップボードに保存されている画像の解像度を半分にして上書きするツールを作ってみました。
出来上がったもの
↑クリップボードに保存されている画像
↓ツールを実行するとクリップボードの画像解像度が半分になる
コード
Cargo.toml
[package]
name = "clipboard_half_image"
version = "0.1.0"
edition = "2024"
[dependencies]
arboard = "3.6.1"
image = "0.25.6"
main.rs
fn main() {
let clipboard = arboard::Clipboard::new();
let Ok(mut ctx) = clipboard else {return};
let Ok(img) = ctx.get_image() else {return};
let Some(cb_img) = image::RgbaImage::from_vec(img.width as u32, img.height as u32, img.bytes.to_vec()) else {return};
let n_width = (img.width as f32 * 0.5) as u32;
let n_height = (img.height as f32 * 0.5) as u32;
let di = image::DynamicImage::from(cb_img);
let resize_di = di.resize(n_width, n_height, image::imageops::FilterType::Lanczos3);
let n_img = arboard::ImageData {
width: resize_di.width() as usize,
height: resize_di.height() as usize,
bytes: resize_di.as_bytes().as_ref().into(),
};
let _res = ctx.set_image(n_img);
}
参考にさせていただいたサイト
https://github.com/1Password/arboard/blob/master/examples/get_image.rs
https://github.com/1Password/arboard/blob/master/examples/set_image.rs