Skip to content
On this page

句法分析

Entanclature 的句法由三部分组成:Hash 信息Meta 信息校验信息。其中 Hash 部分和检验部分的长度是固定的,只有 Meta 部分的长度是未知的,因此部分间不需要分隔符也可以区分。

syntax_analysis

Hash 信息

第一部分是原始图片 (一般是兼容性强的格式) 的 Hash (SHA-1) 值的前 7 位。所有相关图片的第一部分是相同的。因此,他可以用来表明图片间的关系;并且还可以在作用域内保证命名的唯一性 (主要功能)。另一个用隐藏好处是:保证按文件名排序时,相关图片会被放在一起。

虽然 SHA-1 对大小写不敏感,但这里的 Hash 部分强制使用大写字母,以追求最短的 Base64 字符串长度。

hash

Meta 信息

Meta 部分是 Entanclature 的核心。

Meta 信息由数组相互独立的类型标识符 + 图片质量信息标识组成;

每组子 Meta 信息对应一个单独的图片,第一组子 Meta 信息表示的是当前文件的 Meta 信息。为了保证生成文件名的唯一性,除第一组子 Meta 信息外,其余的子 Meta 信息按字母表正序排列

type+quality

以下是部分类型标识符和具体文件格式的对照信息:

类型标识符缩写文件格式MIME 类型文件拓展名
AAVIFAV1 图像文件格式image/avif.avif
JJPEG联合影像专家小组图像image/jpeg.jpeg/.jpg
PPNG便携式网络图像image/png.png
WWebP万维网图像格式image/webp.webp
...............

完整列表可以在这里获取。

以下是图片质量标识以及其具体含义:

图片质量标识符对图片质量标识符的解释
∅ (empty)默认的图片质量 / 目标格式推荐的压缩质量
0 - 1000% - 100%,数字越大,文件大小越大 (甚至可能会比原图更大)
+无损压缩 (可能会比原图更大),等同于 100
-在不较大影响显示效果的情况下,尽可能的降低文件大小

校验位

我们采用与第二代居民身份证校验码的同款算法进行校验;即 ISO 7064:1983.MOD 11-2

具体方法是将 Hash 信息和 Meta 信息的为一位字符在 ASCII 码上的值 (x) 乘以其各自的系数 (2^(n-i)%11, n = 字符串的长度, i = 字符在字符串中的位数) 之和再余上 11:

ISO 7064:1983.MOD 11-2

然后得到的结果 (f(x)) 就是校验码。计算的结果将始终在 0 - 10 的范围间,如果 f(x) = 10,则使用罗马数字 X 表示。

将校验码赋于字符串的末尾,再对整个字符串进行 Base64 编码,就得到最终的文件名了!

verification_algorithm

Released under the CC-BY-SA-4.0 License.