繁体   English   中英

画布作为字符串具有最大压缩率?

[英]Canvas as string with maximum compression?

我有一个PNG图片,并获得了其Base64 PNG字符串表示形式。 它仍然很大,我想知道是否可以进一步对其进行压缩。 那有可能吗?

背景

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

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

非常感谢您的帮助。 提前致谢。

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

请记住,在大多数情况下,压缩将使用字典或其他方法来压缩数据。 如果不能对基本字符串进行真正的压缩,这将考虑在更大的压缩数据中。 您必须找到图片尺寸,压缩后尺寸会变小!

也许另一种方法会有所帮助。 如果仅发送URL,服务器不能为您执行html2canvas吗? 您可以将数据拆分为较小的缓冲区,然后尝试发送它们吗? 也许您应该遍历数据的大小,将其分割为64 KB的缓冲区并传输它们(请记住,您需要在服务器端验证哪个缓冲区属于哪个数据包)。

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

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

为了获得较小的收益,您可以尝试使用pngcrush缩小PNG图像,或者更猛烈地通过降低分辨率和/或颜色数直接减小PNG图像的大小。

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

但是,除了更改图像本身之外,您只会获得很小的收益。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM