无法弄清楚这些C#和Java代码的不同之处

无法弄清楚这些C#和Java代码的不同之处,第1张

概述我有一些C#代码将图像转换为base64字符串.代码是: MemoryStream ms = new MemoryStream();Image img = Image.FromFile(filename);img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);string s = Convert.ToBase64String(ms.Get 我有一些C#代码将图像转换为base64字符串.代码是:

MemoryStream ms = new MemoryStream();Image img = Image.Fromfile(filename);img.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);string s = Convert.ToBase64String(ms.GetBuffer());

我试图用JAVA实现它.我的java代码是:

BufferedImage img = null;img = ImageIO.read(new file(filename));byte[] bytes = ((DataBufferByte)img.getData().getDataBuffer()).getData();String Js = Base64.encodeBase64String(bytes);

这两段代码应为同一图像文件返回相同的字符串.但他们正在返回不同的字符串.我无法弄清楚原因.任何人都可以对此有所了解吗?

解决方法

this two pIEce of code should return the same string for the same image file

不,他们真的不应该.

C#代码返回图像数据的JPEG编码版本的base64表示 – 最后可能会返回0,因为您使用的是GetBuffer而不是ToArray. (你想在这里ToArray.)

Java代码根据其SampleModel返回原始栅格数据的base64表示.我希望它比C#代码返回的字符串大得多.

即使两段代码都使用相同的格式对图像进行编码,这并不意味着它们会提供完全相同的数据 – 这取决于编码.

重要的是,如果您只想要“base64中文件的内容”,那么您根本不需要通过图像.例如,在C#中你可以使用:

string base64 = Convert.ToBase64String(file.ReadAllBytes(filename));

事实上它是一个图像在这方面是无关紧要的 – 文件只是一个字节的集合,你可以在不理解这些字节含义的情况下对其进行base64编码.

总结

以上是内存溢出为你收集整理的无法弄清楚这些C#和Java代码的不同之处全部内容,希望文章能够帮你解决无法弄清楚这些C#和Java代码的不同之处所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1218880.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存