为什么Base64字符串在C#和Android中有所不同
我已经将一个图像转换成base64字符串,并输出与在线网站相同的内容 但是当我从Android上转换相同的图像时,它是不同的 你能解释一下为什么C#和Android base64字符串对于同一个图像是不同的吗 C#.NET代码 安卓代码为什么Base64字符串在C#和Android中有所不同,c#,android,C#,Android,我已经将一个图像转换成base64字符串,并输出与在线网站相同的内容 但是当我从Android上转换相同的图像时,它是不同的 你能解释一下为什么C#和Android base64字符串对于同一个图像是不同的吗 C#.NET代码 安卓代码 Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.image); ByteArrayOutputStream bao = new ByteArrayOutput
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.image);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 100, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeToString(ba,Base64.DEFAULT);
两个映像base64都不同
请帮帮我。base 64有许多变体,包括行长、填充、校验和等。有一个很好的变体表 我猜C#和Android只是使用了不同的变体 编辑根据您更新的帖子,还有其他几种可能性:
- Android在将.jpg文件打包为资源时可能正在修改该文件(然而,尽管资源打包程序在压缩方面非常激进,但情况可能并非如此)李>
- Android可能会以与原始图像不同的方式重新编码图像(两个.jpg文件可以表示相同的像素值,并且不是逐字节相同)
更好的测试是跳过(在Android代码中)从资源到
位图的转换,然后返回到.jpg编码。只需以流的形式打开资源,将其直接读入字节数组,然后在base 64中对其进行编码。base 64有许多变体,包括行长、填充、校验和等。有一个很好的变体表
我猜C#和Android只是使用了不同的变体
编辑根据您更新的帖子,还有其他几种可能性:
- Android在将.jpg文件打包为资源时可能正在修改该文件(然而,尽管资源打包程序在压缩方面非常激进,但情况可能并非如此)李>
- Android可能会以与原始图像不同的方式重新编码图像(两个.jpg文件可以表示相同的像素值,并且不是逐字节相同)
更好的测试是跳过(在Android代码中)从资源到位图的转换,然后返回到.jpg编码。只需以流的形式打开资源,将其直接读入字节数组,并在Base64中对其进行编码
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), R.drawable.image);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bitmapOrg.compress(Bitmap.CompressFormat.JPEG, 100, bao);
byte [] ba = bao.toByteArray();
String ba1=Base64.encodeToString(ba,Base64.DEFAULT);