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

news/2024/11/22 19:27:14/

前言

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

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

于是就写了这个小工具。


水印工具

  • 地址:https://lecepin.github.io/gen-brand-photo-pictrue/
  • Github 仓库地址:https://github.com/lecepin/gen-brand-photo-pictrue

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

  • 自动读取照片 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 原文地址


http://www.ppmy.cn/news/777922.html

相关文章

tree-sitter-java使用方法

获取动态链接库 前提条件&#xff1a;需启动docker java-tree-sitter项目使用Docker来确保构建环境的一致性。在java-tree-sitter的构建过程中&#xff0c;Docker被用来创建一个包含所有必要依赖的环境&#xff0c;然后在这个环境中编译项目。这样可以确保无论你在哪里构建项目…

HarmonyOS学习路之开发篇—数据管理(分布式文件服务)

分布式文件服务概述 分布式文件服务能够为用户设备中的应用程序提供多设备之间的文件共享能力&#xff0c;支持相同帐号下同一应用文件的跨设备访问&#xff0c;应用程序可以不感知文件所在的存储设备&#xff0c;能够在多个设备之间无缝获取文件。 基本概念 分布式文件 分布…

基于matlab检测使用校准的立体摄像头拍摄的视频中的人物并确定其与摄像头的距离(附源码)

一、前言 此示例演示如何检测使用校准的立体摄像头拍摄的视频中的人物&#xff0c;并确定他们与摄像头的距离。 二、加载立体摄像机的参数 加载对象&#xff0c;这是使用应用程序或函数校准相机的结果。 三、创建视频文件阅读器和视频播放器 创建用于读取和显示视频的系统对…

解决:AttributeError module ‘time‘ has no attribute ‘clock‘

一、问题 在 Pycharm Python3.8 环境中&#xff0c;调用 time.clock() 报错&#xff1a;AttributeError: module ‘time’ has no attribute ‘clock’。 二、解决方法 原因是 Python3.8 不再支持time.clock&#xff0c;但在调用时依然包含该方法。可以用 time.perf_counter()…

达人评测酷睿i5 12490f和锐龙r5 5600x 选哪个好 i512490f和r55600x对比

锐龙5 5600X&#xff0c;6核心12线程&#xff0c;3MB二级缓存&#xff0c;32MB三级缓存&#xff0c;基准频率3.7GHz&#xff0c;最高加速4.6GHz&#xff0c;热设计功耗为65W 组装电脑选r5 5600x还是i5 12490f怎么搭配更合适这些点很重要 http://www.adiannao.cn/du i5 12490F…

达人评测 酷睿i5 12450h和锐龙r7 5700u选哪个好 i512450h和r75700u对比

R7 5700U 为 8 核 16 线程&#xff0c;1.8-4.3GHz&#xff0c;GPU 为 8 个计算单元&#xff0c;频率为 1.9GHz。 选i512450h还是r7 5700u这些点很重要http://www.adiannao.cn/dy i5 12450H采用Intel 7工艺4大核4小核设计&#xff0c;拥有8核心12线程&#xff0c;三级缓存为12M&…

软件工程——第9章面向对象方法学引论知识点整理

本专栏是博主个人笔记&#xff0c;主要目的是利用碎片化的时间来记忆软工知识点&#xff0c;特此声明&#xff01; 文章目录 1.当前最好的软件开发技术是&#xff1f; 2.面向对象的原则是什么&#xff1f; 3.人们把客观世界中的实体抽象为什么&#xff1f; 4.软件系统本质上…

回溯法解决地图填色问题

目录 回溯法 最大度优先 最少可选颜色优先 向前探测 随机产生不同规模的图&#xff0c;分析算法效率与图规模的关系&#xff08;四色&#xff09; 回溯法 回溯法的基本思想是采用递归和深度优先搜索的方法&#xff0c;尝试在一组可能的解中搜索出符合要求的解&#xff0c…