Canvas作为字符串使用最大压缩

Canvas as string with maximum compression?

本文关键字:压缩 字符串 Canvas      更新时间:2023-09-26

我有一个PNG图像,并得到它的Base64 PNG字符串表示。它仍然相当大,我想知道它是否可以显著进一步压缩。这可能吗?

的背景

我使用html2canvas创建当前网页的屏幕截图,将其转换为base64(使用canvas.toDataURL())字符串并将其发送到服务器。但是如果字符串太大,服务器返回一个异常。

将画布压缩成字符串形式的最有效方法是什么?

非常感谢任何帮助。

如果您希望压缩字符串,我建议使用压缩库,例如在客户端使用http://rosettacode.org/wiki/LZW_compression#JavaScript进行压缩,在服务器端使用http://webdevwonders.com/lzw-compression-and-decompression-with-javascript-and-php/进行解压(假设您使用php)。这种方法的优点是可以同时在客户端和服务器端工作,并且使用了备受推崇的LZW算法。

请记住,在大多数情况下,压缩将使用字典或其他方法来压缩数据。如果不能很好地压缩基本字符串,这将考虑更大的压缩数据。你必须找到一个图片的大小,这将导致一个较小的尺寸后压缩!

也许另一种方法会有帮助。如果你只发送URL,服务器不能为你做html2canvas吗?你能把数据分成更小的缓冲区,然后试着发送它们吗?也许你应该遍历你的数据大小,把它分成64 KB的缓冲区并传输它们(记住你需要在服务器端验证哪个缓冲区属于哪个数据包)。

否则尝试GZIP, LZW, LZMA算法。也许你也可以使用一个工具来压缩html2canvas创建的图像?

你可能无法从这里到达那里。您可能需要找到另一种方法来获取图像,而不是尝试将其塞进URL。

对于较小的增益,您可以尝试pingcrush使PNG图像变小,或者更猛烈地通过降低分辨率和/或颜色数量直接减小PNG图像的大小。

您还可以使用与Base64不同的编码方案,通过使用超过64个编码字符来挤出更多的字符。您可以使用66个非保留字符,另外,根据URL的语法,您可能会使用18个保留字符中的许多字符。

但是除了改变图像本身之外,您只能实现很小的收益。