6 个稳定版本

1.3.1 2024 年 8 月 9 日
1.3.0 2024 年 8 月 8 日
1.2.0 2024 年 4 月 26 日

图像 中排名第 161

Download history 18/week @ 2024-04-29 7/week @ 2024-05-20 595/week @ 2024-08-05 19/week @ 2024-08-12

每月下载量 614

自定义许可

800KB
1K SLoC

imghash - Rust 的图像哈希

Crates.io Version docs.rs Main codecov

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