如何压缩Base64字符串

11
我正在从Unity Android应用程序向后端API发送一个5MB的Base64字符串。在POST和GET时,由于数据量较大,应用程序变得缓慢。 我想将这个5MB Base64字符串压缩到更小的大小。有人可以帮我找到解决方案吗?
我已经尝试了所有的解决方案,如GZipStream等,但它们仅适用于普通字符串,而不适用于Base64。
有人能告诉我如何压缩和解压缩Base64字符串吗?

3
使用base-64的想法是它可以在不能传输二进制数据的通道上传输。如果您可以发送gzipped数据,那么最好将数据压缩而不是将其转换为base-64。 - Andrew Morton
@andrewMorton 如果您的意思是发送字节,我也尝试过这部分,但在压缩之前,字节长度为4496330,在使用gzip压缩后,长度变为4789390。 - nithish pitla
你试图发送什么?你能给我们展示一下数据和代码的例子吗?如果你遇到了一些问题,更加健谈而不是简洁的方法可能会更好。 - Simon Price
3
如果你发送的是像jpeg格式一样被压缩过的图片,你将无法再次进行压缩,甚至可能会使得文件大小变大。如果你有一个4MB的jpeg文件,很可能需要将其调整为更小的像素尺寸。 - Andrew Morton
1
如果你有一个4MB的JPEG文件,你可能需要将其调整为更小的像素尺寸。 - Andrew Morton
显示剩余3条评论
1个回答

15

Base64已经以一种不适合大多数压缩算法的方式进行编码了-请参见为什么base64编码数据的压缩效果那么差?获取详细信息。

您需要压缩原始二进制数据,然后对压缩后的数据进行base64转换,或者根本不要转换为base64。

此外,许多HTTP客户端/服务器将自动压缩流,因此可能已经隐式地发生了压缩。

一个更好的问题可能是为什么您正在发送如此大量的数据作为Web请求,也许您应该尝试缩小数据大小而不是尝试压缩它...


我需要将图片保存为个人资料照片。如何缩小尺寸,能否详细说明一下? - nithish pitla
public IEnumerator DecodeImg(string photoPath) { if (string.IsNullOrEmpty(photoPath)) yield break; byte[] bytesimg = File.ReadAllBytes(photoPath); string imageStr = Convert.ToBase64String(bytesimg);// 我需要将JPEG/PNG存储在服务器上,以显示用户的个人资料图片 } - nithish pitla
3
这是一张图片?图片文件通常已经压缩过了,你无法减小图片文件的大小。将其转换为base64会增加文件大小,所以直接发送字节将是最快的方式。 - Milney
3
如果您不需要原始质量,可以使用图像处理库来降低图像的质量和大小,然后再发送。 - Milney
你可以尝试使用微软提供的:https://learn.microsoft.com/en-us/dotnet/api/system.drawing.imaging.encoderparameter?redirectedfrom=MSDN&view=netframework-4.8 或者查看像这样的库:https://csharp-station.com/4-best-c-libraries-for-image-processing/ - Milney
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接