如何使用JavaScript在png文件中存储任意数据?

kh212irz  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(262)

我在TypeScript中创建了一个UserScript,允许用户将特定的<canvas>下载为.png文件。这个<canvas>是一个装扮游戏中的服装。我希望在导出的.png中包含一个JSON blob,以便用户稍后可以导入这个.png并访问服装的数据。
数据插入应该是非破坏性的(无隐写术)。
如何在JavaScript的PNG文件中插入任意数据?

pftdvrlh

pftdvrlh1#

老问题,但我想我会分享我的想法,以防有人遇到类似的问题。
我相信保存画布本质上是通过base 64编码图像数据来工作的,所以我不认为会有一种方法来做你想要的事情。
您可以将数据发送到服务器并在那里附加任何您想要的元数据。我相信PNG格式支持任意元数据。
但是,您也可以使用透明像素的RGB通道以“非破坏性”的方式对数据进行编码(假设存在透明像素),因为它们是透明的,所以RGB值并不重要。
如果您没有足够的空间,有几个选项:

  • 压缩/缩减要保存的数据
  • 通过缩放或添加透明像素边框来提高分辨率
  • 将信息存储在服务器上,而不是对全部数据进行编码,然后只对引用ID进行编码,并使用 AJAX 请求检索它。

此外,如果只使用非透明像素的最低有效位,则可以采用不会显著降低图像质量的方式对更多数据进行编码。还可以通过只接触棋盘/抖动图案中的像素来减少图像质量下降。

相关问题