gpt4 book ai didi

java - 期望的结果数据不是通过从 Android 手机扫描二维码来压缩的 Base64 字符串吗?

转载 作者:行者123 更新时间:2023-12-01 09:34:28 25 4
gpt4 key购买 nike

我从图像中提取了base64字符串,然后对base64字符串进行压缩。然后使用这个压缩字符串生成QR码。但是当我使用 Android 手机扫描(QR 码)结果时,我得到像 17740296 这样的值,这不是我想要的值。我的目的是,在获取扫描值后,我将其解压缩并使用来自 base64 的位图显示图像。我的代码有什么问题。我正在使用java代码生成QR码。(我也尝试过UTF-8但不起作用)。此代码适用于字符串,但不适用于图像。

压缩代码是 -

public static String compressBD(String str) throws IOException {
if (str == null || str.length() == 0) {
return str;
}

ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out);
gzip.write(str.getBytes());
gzip.close();
return out.toString("ISO-8859-1");
}

解压代码是-

public static String decompressBD(String str) throws Exception {
if (str == null || str.length() == 0) {
return str.toString();
}
// System.out.println("Input String length : " + str.toString().length());
GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(str.getBytes("ISO-8859-1")));
BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "ISO-8859-1"));
String outStr = "";
String line;
while ((line=bf.readLine())!=null) {
outStr += line;
}
//System.out.println("Output String lenght : " + outStr.length());
return outStr;
}

最佳答案

这行不通。

Base64 是一种完全可以在字符串中使用的编码。您可以将其打印在一张纸上,将其输入到您的机器中并从中解码图像。

但是,如果您使用 gzip 压缩并将其转换为字符串,则压缩会生成字符串编码之外的字节,并且无法打印或呈现为字符串。

Base64 是字符串的“压缩”编码。我真的鼓励你不要使用字符串作为存储,而是直接存储二进制数据,或者传输它。这也会快得多,因为 base64 编码非常慢。

其目的完全是在文本消息中存储包含不可打印字节的二进制内容。无论出于何种原因。

我希望这是可以理解的,但这基本上意味着,你不能在字符串中存储 base64 zip 内容。如果你想压缩,你必须存储二进制表示。

关于java - 期望的结果数据不是通过从 Android 手机扫描二维码来压缩的 Base64 字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39120307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com