将签名保存到文件时 RenderBitmap 的位图尺寸
如果您只想输出签名图像(即没有生物识别数据),则位图尺寸可以根据需要设置实际大小。
如果图像太小,签名将难以辨认。如果你把它做得太大,边缘的墨迹可能看起来很粗糙。
如果要在签名图像文件中包含生物识别信息(使用 RenderBitmap 的 RenderEncodeData 标志),则需要确保尺寸足够大。
通常,大小为 150 x 100 的位图应为您提供足够的空间来对平均签名进行编码,并且输出文件的大小应小于 3Kb。
对签名进行编码所需的最小像素数为:2 *(12 + 字节数)。
字节数因设备而异。通常,每个有4个字节:
- 笔画编号
- x 坐标
- y 坐标
- 上/下状态
此外:
- 如果设备提供定时信息,则有 4 个字节用于时间
- 如果设备提供压力,将有4个字节用于压力
给定一个报告速率恒定的设备(目前的 STU pad 都是每秒产生 200 个点),并且知道每个笔尖数据的字节数,这样就可以粗略估计出每秒签名所产生的生物识别数据字节数。笔数据总是占签名数据的大部分。但还涉及其他因素,并且流存储中存在一定量的压缩,从而减少要编码的字节数。
下面的例子取自我们的标准 CaptureImage.js,位图大小为 300 x 150 = 45,000 像素,这对于大多数签名的编码来说都绰绰有余。
filename = "sig.png";
flags = 0x1000 | 0x80000 | 0x400000; //SigObj.outputFilename | SigObj.color32BPP | SigObj.encodeData
rc = sigCtl.Signature.RenderBitmap(filename, 300, 150, "image/png", 0.5, 0xff0000, 0xffffff, 0.0, 0.0, flags );
然而,签名中的生物识别数据量可能会根据签名的长度(墨水量)及其执行速度而有很大差异。
如果相同的签名写得更慢,它会生成更多的数据,因为无论签名写得有多快,笔仍然每秒输出相同数量的点(在 STU 数位板上为 200)。
如果您使用 eSeal,则需要更大的位图,因为 eSeal 图像是与签名数据一起编码的。
因此位图需要足够大以容纳 eSeal 图像和签名数据。
以下是使用 eSeal 时计算适当图像尺寸(像素尺寸)的一些指南。
这些计算的假设是:
- 您想要渲染 32 位像素颜色(使用 RenderColor32BPP 标志)
- 签名数据本身需要 15,000 像素(这是一个相当高的估计)
-
编码您的 eSeal 图像的一个字节大约需要 2 个像素(这是一个近似的准则)
这里有两个例子:
eSeal 大小(以像素为单位) | 每个像素需要的字节数 | 编码 eSeal 所需的字节数 | 编码 eSeal 所需的像素 | 签名所需的像素 | 需要的总像素 |
---|---|---|---|---|---|
400x240 | 4(即32位) | 400 * 240 * 4 = 384,000 | 384,000 / 2 = 192,000 | 15,000 | 192,000 + 15,000 = 207,000 |
684x432 | 4(即32位) | 684 * 432 * 4 = 1,181,952 | 1,181,952 / 2 = 590,976 | 15,000 | 590,976 + 15,000 = 605,976 |
使用 JPG 或压缩的 PNG 或更小的位深度应该大大有助于减少输出图像的大小要求。
或者,您可以增加所请求位图的大小(像素数)以提供更多空间来在其中进行编码。
但请注意,如果要在签名图像中编码生物识别数据(使用 RenderEncodeData 标志),则不应使用压缩图像格式(如 JPG 或压缩 PNG),因为这会损坏生物识别数据。