小米 12S Utra 莱卡水印生成在线工具

博主分享了一个利用Rust编写的WebAssembly工具,该工具能够自动读取照片Exif数据并添加水印,支持多种相机品牌。通过对比,Rust实现的Exif读取速度比npm库快约10倍。此外,文章还提供了工具的在线地址和GitHub仓库链接,方便摄影爱好者自定义照片信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近看到小米 12S Utra 的发布,看了下详情页面,发现演示的照片都好看的,包含了品牌、设备、镜头、位置等信息,如下图所示:
在这里插入图片描述
作为一个摄影爱好者,也希望把自己的照片也输出这些信息。

但目前此类水印好像只在小米 12S Utra 的编辑器里有,没有其他途径。

于是就写了这个小工具。


水印工具

在这里插入图片描述
支持:

  • 自动读取照片 exif 数据,并自动填写到图片中,包括型号、品牌、焦距、光圈、快门、ISO、拍摄时间、GPS 信息。
  • 可手动编辑水印参数。
  • 目前支持 苹果、佳能、大疆、富士、华为、莱卡、小米、尼康、索尼 品牌。

实现

实现上比较容易,就是读取照片数据的前 4KB 数据,获取照片的基本信息,也就是 Exif 数据。

最近刚好在用 Rust,于就是就 Rust 写了 WebAssembly 进行 Exif 数据的读取,代码如下:

#[wasm_bindgen]
pub fn get_exif(raw: Vec<u8>) -> JsValue {
    let mut exif_data: Vec<ExifData> = Vec::new();
    let exifreader = exif::Reader::new();
    let mut bufreader = std::io::Cursor::new(raw.as_slice());
    let exif = exifreader.read_from_container(&mut bufreader).unwrap();

    for field in exif.fields() {
        if let Some(_) = field.tag.to_string().find("Tag(Exif") {
            continue;
        }

        if ["Make", "Model"].contains(&field.tag.to_string().as_str()) {
            exif_data.push(ExifData {
                tag: field.tag.to_string(),
                value: field
                    .display_value()
                    .to_string()
                    .replace(
                        |item: char| ["\"", ","].contains(&item.to_string().as_str()),
                        "",
                    )
                    .trim()
                    .to_string(),
                value_with_unit: field
                    .display_value()
                    .with_unit(&exif)
                    .to_string()
                    .replace('"', ""),
            });
            continue;
        }

        exif_data.push(ExifData {
            tag: field.tag.to_string(),
            value: field.display_value().to_string(),
            value_with_unit: field.display_value().with_unit(&exif).to_string(),
        });
    }

    JsValue::from_serde(&exif_data).unwrap()
}

测试了一下用 Rust Exif 与 npm exif 的执行速度:

  • Rust WebAssembly:0.6ms
  • Npm exif 包:5.6ms

大约快 10倍左右,还是很夸张的。

其它示例

最后看下,使用这个工具生成的照片吧。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

🌟 Github 原文地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王乐平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值