6 个稳定版本
1.3.1 | 2024 年 8 月 9 日 |
---|---|
1.3.0 | 2024 年 8 月 8 日 |
1.2.0 | 2024 年 4 月 26 日 |
在 图像 中排名第 161
每月下载量 614
800KB
1K SLoC
imghash
- Rust 的图像哈希
imghash
是一个crate,允许您为图像生成不同的哈希值。以下哈希值可以使用此crate生成
用法
根据您的用例,有多种方式可以使用 imghash
。
快速入门
使用 imghash
的简单方法是使用提供的实用函数,这些函数假设合理的默认值。
use imghash::{average_hash, difference_hash, perceptual_hash};
let path = Path::new("path/to/my/image");
let average = average_hash(path);
let difference = difference_hash(path);
let perceptual = perceptual_hash(path);
这些函数中的每一个都返回一个 Result<ImageHash, String>
类型。本质上,ImageHash
对象是一个用于图像编码位矩阵的容器(了解更多 这里)。可以通过调用 encode
方法将 ImageHash
编码为十六进制字符串。
let res: String = hash.encode();
编码 & 解码
可以使用 encode()
方法将哈希编码为十六进制字符串。
let res: String = hash.encode();
十六进制字符串也可以解码回 ImageHash
。
let res: Result<ImageHash, String> = hash.decode("24f0", 4, 4);
哈希的第一个参数是字符串,第二个和第三个是底层矩阵的宽度和高度。这是必需的,因为每个字符串都可以编码为不同大小的矩阵。如果您想了解更多关于底层位矩阵的信息,请阅读有关 编码 的文档。
汉明距离
汉明距离是两个哈希之间的距离,由它们之间不同的位数定义。这个距离可以很容易地计算
let distance: Result<usize, String> = hash.distance(other_hash);
如果哈希的大小不同,这可能会产生错误。
自定义哈希器
如果您需要更多灵活性,例如计算比默认值更大的位矩阵,您可以使用自定义的 Hasher
。
对于每种哈希类型,crate 都提供了一个自定义哈希器;在这里,我们将使用 AverageHasher
作为示例。
use imghash::{average::AverageHasher};
let path = Path::new("path/to/my/image");
let hasher = AverageHasher {
width: 10,
height: 10,
};
let hash = hasher.hash_from_path(path);
Hasher
实例还可以让您为已加载的图像创建哈希值
let img = ImageReader::open(...);
let hasher = AverageHasher { ..Default::default() };
let hash = hasher.hash_from_img(&img);
每个哈希器也实现了 Default
特性,允许您使用它们的默认值来创建它们
let hasher = AverageHasher { ..Default::default() };
Python 兼容性
推动开发此 crate 的一个主要因素是需要对一个哈希器实现,使其与 Python 的 imagehash
包 相匹配。
现在可以在这里找到带有 Python 绑定的包装器 这里。
截至版本 1.2.0,本 crate 生成的所有哈希值都应与 imagehash
生成的哈希值匹配 - 然而,对于其他任何包或 crate 都不能保证。此 crate 的早期版本(<1.2.0)生成的哈希值 不 相同。要确保您生成相同的哈希值,请将哈希器的颜色空间设置为 REC601
,因为这将确保使用与 Pillow 相同的灰度化 - 这被配置为默认值。
依赖项
~6MB
~86K SLoC