Compression 需要一个压缩算法的想法吗

Compression 需要一个压缩算法的想法吗,compression,Compression,背景:我正在制作一个基于网络的头像生成系统,用户可以为他的头像选择片段(如身体、背景、眼睛、嘴巴、夹克、裤子等),然后根据这些选择生成图片。出于性能原因,我打算执行以下操作:从所选项目列表生成一个包含其ID的文件名,并将图片保存在此文件名下。然后,当请求图片时,Web服务器将直接为其提供服务。如果找不到图片,404处理程序将生成它。这就是问题所在: 问题:我想将整数列表压缩为尽可能短的字符串,只包含ASCII字符(可用于文件名和URL)。整数将是唯一的,并且大于0(0本身不在其中)。我预计可能会

背景:我正在制作一个基于网络的头像生成系统,用户可以为他的头像选择片段(如身体、背景、眼睛、嘴巴、夹克、裤子等),然后根据这些选择生成图片。出于性能原因,我打算执行以下操作:从所选项目列表生成一个包含其ID的文件名,并将图片保存在此文件名下。然后,当请求图片时,Web服务器将直接为其提供服务。如果找不到图片,404处理程序将生成它。这就是问题所在:

问题:我想将整数列表压缩为尽可能短的字符串,只包含ASCII字符(可用于文件名和URL)。整数将是唯一的,并且大于0(0本身不在其中)。我预计可能会有20个左右,而且不会超过200个,但这只是一个猜测(尽管如果超过500个,我会感到惊讶)。顺序并不重要

你建议我做什么

更新:哎呀,看来我犯了一个根本性的错误。我希望避免将生成的每个化身存储在DB中,而是将所有必要的信息存储在文件名中。通过这种方式,我希望避免不必要地使用DB,从而提高性能。然而,今天我突然想到,人们可能想要改变他们的化身,并期望他们在使用过的任何地方都能更新。因此,文件名必须是常量。这样就只剩下一个选项了——我必须在数据库中保存关于化身的信息。然后我还可以使用guid或其他一些随机字符串作为文件名


谢谢大家的帮助,对误报表示歉意(

将整数(每项9位)连接成一个字节数组,然后将结果编码到中。

不太清楚您在寻找什么;ASCII-85可以工作吗

如中所示,每个整数编码为一个UTF-8字符,将这些字符组成一个字符串,然后将结果字符串编码为base-85


正如Doug Currie指出的,ASCII-85不是一个好的选择。任何不使用正斜杠的base64变体都更可取。

一个选项可能是采用数字组合的md5来获得128位数字。然后,您可以将其十六进制编码为32个字符的ASCII字符串,或者base64将其编码为22个字符的字符串

现在,您可以保证所有文件名的大小都是固定的,并且发生冲突的可能性非常小


这为每个文件名节省了少量空间(128位而不是180位)它独立于值的数量和每个值的范围,因此即使超过20项或最大值500,也不会影响文件名长度。

创建从“avatar combined components”键到文件名的映射;然后为文件名使用GUID。无需压缩算法。ASCI85是一个很好的建议,但Base64使结果更容易用作文件名。啊,没错。正斜杠和尖括号是有问题的:^}这如何压缩数据并使结果字符串尽可能短?base64url变量没有/根据他估计的20个整数,每个整数的范围为200,我估计为153位。这可以在中用Base64编码26个字符。似乎足够合理。但是我将无法再从文件名中解码ID。啊。不清楚您是否也想进行反向查找。从您的问题来看,您似乎只想将一组整数映射到文件名。在这种情况下,不要对其进行哈希:)