簡體   English   中英

無法弄清楚這些C#和Java代碼的不同之處

[英]Can't figure out where these C# and Java code differ

我有一些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);

這兩段代碼應為同一圖像文件返回相同的字符串。 但他們正在返回不同的字符串。 我無法弄清楚原因。 任何人都可以對此有所了解嗎?

這兩段代碼應為同一圖像文件返回相同的字符串

不,他們真的不應該。

C#代碼返回圖像數據的JPEG編碼版本的base64表示 - 最后可能會返回0,因為您使用的是GetBuffer而不是ToArray (你想在這里ToArray 。)

Java代碼根據其SampleModel返回原始柵格數據的base64表示。 我希望它比C#代碼返回的字符串大得多。

即使兩段代碼都使用相同的格式對圖像進行編碼,這並不意味着它們會提供完全相同的數據 - 這取決於編碼。

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

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

事實上它是一個圖像在這方面是無關緊要的 - 文件只是一個字節的集合,你可以在不理解這些字節含義的情況下對其進行base64編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM