如何通过图像有效地传输数据?
How can I transfer data efficiently via images?
对于一个客户项目,我可以通过远程桌面连接访问开发和构建服务器。我需要下载一些用于本地测试的构建工件,但由于客户公司的政策,我无法获得 ssh 访问权限或任何对文件传输有用的东西。通过共享剪贴板,我实际上可以复制数据(例如 base 64 编码),但不幸的是,这似乎无法可靠地工作。手头有一个便宜的 HDMI 转 USB 视频捕获设备,我想我可以用它来传输数据。该设备充其量只能捕获 1080p 原始 YUV 4:2:2 视频,可惜生成的静止图像有些模糊。
那么,algorithm/technology 我可以使用 encode/decode 我想要传输的数据吗?显然 QR 码可以工作,但数据速率会很差(每个捕获的帧只有几 KB —— 由于 RD 连接不太好,我只能每隔几秒使用一个帧)。
经过一些试验,我发现捕获设备的色彩保真度根本没有用。我尝试将数据编码为灰度像素,但即使多次重复每个像素值也无法生成可以从中可靠地提取原始 8 位值的捕获图像。也许只使用每个灰度值的高 4 位并多次重复该值会奏效,但最后我得到了简单的黑白图像,在两个后续像素中编码了相同的位。在捕获的图像中,我还没有经历过翻转位(而不是使用一个像素位)。
所以,这毕竟离使用二维码不远了(元素也必须是2x1),但数据密度要高一些。我只有一个带有签名、图像尺寸和校验和的小 header,因此我可以轻松找到验证编码数据。我还在左边留了几个像素,右边留空。所以每张 1080p 图像我可以编码大约 125 KiB。这比我希望的要少很多,但至少它允许我在合理的时间内无人看管地传输数据。
对于一个客户项目,我可以通过远程桌面连接访问开发和构建服务器。我需要下载一些用于本地测试的构建工件,但由于客户公司的政策,我无法获得 ssh 访问权限或任何对文件传输有用的东西。通过共享剪贴板,我实际上可以复制数据(例如 base 64 编码),但不幸的是,这似乎无法可靠地工作。手头有一个便宜的 HDMI 转 USB 视频捕获设备,我想我可以用它来传输数据。该设备充其量只能捕获 1080p 原始 YUV 4:2:2 视频,可惜生成的静止图像有些模糊。
那么,algorithm/technology 我可以使用 encode/decode 我想要传输的数据吗?显然 QR 码可以工作,但数据速率会很差(每个捕获的帧只有几 KB —— 由于 RD 连接不太好,我只能每隔几秒使用一个帧)。
经过一些试验,我发现捕获设备的色彩保真度根本没有用。我尝试将数据编码为灰度像素,但即使多次重复每个像素值也无法生成可以从中可靠地提取原始 8 位值的捕获图像。也许只使用每个灰度值的高 4 位并多次重复该值会奏效,但最后我得到了简单的黑白图像,在两个后续像素中编码了相同的位。在捕获的图像中,我还没有经历过翻转位(而不是使用一个像素位)。
所以,这毕竟离使用二维码不远了(元素也必须是2x1),但数据密度要高一些。我只有一个带有签名、图像尺寸和校验和的小 header,因此我可以轻松找到验证编码数据。我还在左边留了几个像素,右边留空。所以每张 1080p 图像我可以编码大约 125 KiB。这比我希望的要少很多,但至少它允许我在合理的时间内无人看管地传输数据。